从 jQuery Ajax 方法返回

Posted

技术标签:

【中文标题】从 jQuery Ajax 方法返回【英文标题】:Return from jQuery Ajax Method 【发布时间】:2012-11-20 01:07:21 【问题描述】:

我有一个名为 searchReportButton 的按钮。单击此按钮时,我需要使用 ajax Web 方法“Error.aspx/CheckSessionExpiry”从服务器检查会话值。这是在 checkSession javascript 函数中完成的。 checkSession 现在没有返回任何内容 - 而是根据结果处理所需的操作(重定向到错误页面)。

    我需要将 ajax web 方法的结果返回给 Main Caller。我们如何才能做到这一点? 我是否需要将剩余的代码(来自 Main Caller)移动到 succsess 回调中?

主调用者

searchReportButton.click(function () 

    checkSession();
    //Remainging Code

);

助手

function checkSession() 

var win = 101;
$.ajax(
        
            type: "POST",
            url: "Error.aspx/CheckSessionExpiry",
            data: '"winNumber": "' + win + '"',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: handleSessionResult

        
        );
        

结果助手

  function handleSessionResult(result) 


    if (result.hasOwnProperty("d")) 
    
      result = result.d
    

    if (result == "ACTIVE") 
    
      window.location.href("Error.aspx");
      return false;
    

   //alert(result);

参考:

    How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request? $.ajax context option jQuery Ajax Callback does not get Context jQuery pass more parameters into callback

【问题讨论】:

Variable doesn't get returned JQuery的可能重复 不是重复的。这个问题有一个额外的部分——如何处理remaining code 部分。它也得到了回答。 【参考方案1】:

你不能。或者,更具体地说,您不应该不这样做。 Ajax 请求是async,这意味着它在执行过程中不会阻塞其他 JS 操作(想象一下,如果服务器响应缓慢,浏览器会冻结 5 秒?)。

相反,您可以传递 success 回调,您已经这样做了。然后在那里做任何你想做的事情。

所以而不是:

checkSession();
//Remainging Code

你应该在回调中移动剩余的代码:

function handleSessionResult(result) 
    //... current code
    //Remaining code from the above

【讨论】:

在完成ajax调用之前是否会执行Main Caller中剩余的代码? 是的,因为 ajax 是异步的。 Ajax 方法中的 sync:true 是否有帮助? @Lijo,是的,但你永远不应该使用它。如果您将 async 设置为 false,您将不再执行 AJAX - 您正在冻结客户端浏览器。您基本上是在扼杀 AJAX 的全部目的,即异步。 @Lijo,很简单——你应该把剩余的代码放在成功回调中——>在 AJAX 调用之后不应该有任何依赖于这个调用结果的代码。

以上是关于从 jQuery Ajax 方法返回的主要内容,如果未能解决你的问题,请参考以下文章

jQuery Ajax 从控制器操作方法返回未定义

.NET (ApiController) / jQuery .ajax:从 POST 返回啥?

使用 Spring MVC 从 Jquery ajax 方法返回字符串数组

在Controller中使用Jquery ajax调用ActionResult方法并返回数据

jquery ajax

从 jquery ajax 调用分配变量返回未定义