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

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

  1. 我需要将 ajax web 方法的结果返回给 Main Caller。我们如何才能做到这一点?
  2. 我是否需要将剩余的代码(来自 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);

}

参考:

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

【问题讨论】:

标签: jquery


【解决方案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 调用之后不应该有任何依赖于这个调用结果的代码。
猜你喜欢
  • 2012-02-07
  • 1970-01-01
  • 2016-01-03
  • 2016-09-17
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 2011-02-20
  • 2012-10-14
相关资源
最近更新 更多