如何从ajax回调中的“成功”调用代码隐藏方法?

时间:2013-09-09 22:00:01

标签: javascript jquery asp.net ajax

如何修改下面的代码以使用'success'在代码隐藏中调用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覆盖。

谢谢

3 个答案:

答案 0 :(得分: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);
            }
       }
    }

答案 1 :(得分:0)

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

function getData(ajaxQuery,callBack){

var ajaxHREF =“myPage.aspx / testMethod”;

$。AJAX({     url:ajaxHREF,     类型:“post”,     数据:ajaxQuery,
    beforeSend:function(xhr){         xhr.overrideMimeType( “应用程序/ JSON”);         },     成功:功能(响应,textStatus,jqXHR){
            var jsonData = $ .parseJSON(response);         callBack(jsonData);         });

谢谢

答案 2 :(得分:0)

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

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

jQuery.ajax handling continue responses: "success:" vs ".done"?

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

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