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

How to call code-behind method from 'success' in ajax callback?

本文关键字:成功 调用 代码 方法 隐藏 ajax 回调      更新时间:2023-09-26

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

谢谢

您需要将回调函数传递给包装 $(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);
        },         

然而,一个更好的方法是全球成功事件。 这样做更好,因为您拥有可用于启用结果动态处理的调用的所有属性。 内联创建全局成功事件 = $(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);
            }
       }
    }

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

function getData(ajaxQuery, callBack){

var ajaxHREF = "myPage.aspx/testMethod";

$.ajax({ 网址: ajaxHREF, 类型:"帖子", data: ajaxQuery,
之前发送: 函数 ( xhr ) { xhr.overrideMimeType("application/json"); }, success: function(response, textStatus, jqXHR){
var jsonData = $.parseJSON(response); 回调 (jsonData); });

谢谢

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

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

jQuery.ajax 处理继续响应:"成功:" vs ".done"?

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

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