1

如何修改下面的代码以使用“成功”在代码隐藏中调用 testMethod()?我需要等待来自 testMesthod() 的返回值并处理它。

$.ajax( { 

    url : 'myPage.aspx/testMethod', 
    type : "POST", 
    contentType : "application/json; charset=utf-8", 
    data : "{'name':'" + aNb + "'}", 
    dataType : "json"

 }).done(function() {
      alert("ok");
 }).fail(function() {
      alert("not ok");
 }); 

上面的代码不起作用,因为不知何故最新的 JQuery 版本(1.10.1)被 1.3.2 覆盖。

谢谢

4

3 回答 3

0

感谢您的回复,但我仍然看不到 callbacl 如何帮助我。我需要在代码隐藏中调用 webmethod:testMethod() Ajax 调用做到了,url = "myPage.aspx/testMethod" 将“调用”webmethod testMethod(),但它是异步的,并快速返回到 ajax 调用的“成功”部分. 但是,我需要等待 testMethod() 完成处理,检索 testMethod() 返回的结果并进行处理。异步 ajax 将返回“成功”而不等待 testMethod() 完成,并且我们不会得到任何响应数据。那么,回调如何帮助我实现它呢?

函数getData(ajaxQuery,callBack){

var ajaxHREF = "myPage.aspx/testMethod";

$.ajax({ url: ajaxHREF, type: "post", data: ajaxQuery, beforeSend
: function (xhr) { xhr.overrideMimeType("application/json"); }, success: function(response, textStatus, jqXHR){
var jsonData = $.parseJSON(response); callBack (jsonData); });

谢谢

于 2013-09-10T14:43:53.597 回答
0

@Karen Slon - 如果我正确理解了这个问题,我认为您需要在概念上将客户端与服务器端分开。.success/.done 或全局 ajaxSuccess 事件中的回调使您的网页能够发起请求并在服务器端处理您的请求“myPage.aspx/testMethod”时继续处理。当它成功完成时,它返回到成功事件。现在,如果 testMethod 没有返回任何内容,那么您会发现自己在没有结果的成功事件事件中。但是除非 web 方法 testMethod 已成功完成并返回控制权,否则您无法到达那里。您示例中的 .done 事件只有 alert("ok");。是什么让您认为 .done 事件发生时 web 方法 testMethod 不完整?

查看这些帖子以获得更好的示例:

jQuery.ajax 处理继续响应:“成功:”与“.done”?

http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

http://api.jquery.com/category/deferred-object/

于 2013-09-12T04:33:40.100 回答
0

您需要将回调函数传递给包装 $(ajax) 的函数。

function getData(ajaxQuery, callBack){    
    var ajaxHREF = 'your url';
$.ajax({
    url: ajaxHREF,
    type: "post",
    data: ajaxQuery,         
    beforeSend: function ( xhr ) {
        xhr.overrideMimeType("application/json");
        },
    success: function(response, textStatus, jqXHR){             
            var jsonData = $.parseJSON(response);
        callBack (jsonData);
        },         

然而,一个更好的方法是全球成功事件。这样做会更好,因为您可以使用调用的所有属性来启用结果的动态处理。创建全局成功事件 inline = $(document).ajaxSuccess 这会为所有 jquery ajax 成功事件调用,因此您需要区分哪些调用适用于您的特定处理程序(适用于每个全局处理程序)。

$(document).ajaxSuccess(function(event, xhr, settings) {
    var query = settings.data;
    var mimeType = settings.mimeType;
    if (query.match(/ameaningfulvalueforthishandler/)){
       if(mimeType.match(/application\/json/)){
            var jsonData = $.parseJSON(xhr.responseText);
            }
       }
    }
于 2013-09-09T22:38:28.277 回答