AJAX请求成功时如何返回值
这个问题在这里已经有了答案:
您应该将参数async
设置为false
。 试试这个代码:
function ajaxRefresh(actionUrl) {
var succeed = false;
$.ajax({
async: false,
url: actionUrl,
success: function() {
succeed = true;
}});
return succeed;
}
您可以稍微重构代码,以便您的成功回调触发取决于真/假结果的下一个操作。 例如,如果你目前有类似的东西:
function main() {
// some code
if (ajaxRefresh(url)) {
// do something
}
}
您可以将其改为如下所示:
function main() {
// some code
ajaxRefresh(url);
}
function doSomething(successFlag) {
if (successFlag) {
// do something
}
}
function ajaxRefresh(actionUrl) {
$.ajax({
url: actionUrl,
success: function() {
doSomething(true); // or false as appropriate
}});
}
您也可以将if
测试放入ajax回调函数中,而不是放在doSomething()
函数中。 由你决定。
或者你可以做一个同步请求,并在请求完成后找出ajaxRefresh()
函数的返回值。 我不会建议大多数目的。
你不能返回“真”,直到Ajax请求没有完成,因为它是你提到的异步。 所以这个函数在ajax请求完成之前就离开了。
解决方案1
function ajaxRefresh(actionUrl, successCallback) {
$.ajax({
url: actionUrl,
success: successcallback
});
}
但是有一个解决方法:只需在函数中添加一个回调参数。 该功能将在请求完成时执行。
解决方案2
你可以返回一个jQuery的推迟。
function ajaxRefresh(actionUrl, successCallback) {
return $.ajax({
url: actionUrl
});
}
现在你可以使用如下的函数:
function otherFunction()
{
ajaxRefresh().success(function() {
//The ajax refresh succeeded!
}).error(function() {
//There was an error!
});
}
欲了解更多关于jQuery deferreds的信息,请查看http://www.erichynds.com/jquery/using-deferreds-in-jquery/。
链接地址: http://www.djcxy.com/p/9493.html