从 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 方法返回的主要内容,如果未能解决你的问题,请参考以下文章
.NET (ApiController) / jQuery .ajax:从 POST 返回啥?
使用 Spring MVC 从 Jquery ajax 方法返回字符串数组