Javascript AJAX请求成功时如何返回值
即使请求成功,函数也会返回Javascript AJAX请求成功时如何返回值,javascript,jquery,ajax,asynchronous,return-value,Javascript,Jquery,Ajax,Asynchronous,Return Value,即使请求成功,函数也会返回false,因为请求是异步的。当请求成功时,我如何返回true?您可以稍微重构代码,以便成功回调触发下一个操作,该操作取决于真/假结果。例如,如果您当前有以下内容: function ajaxRefresh(actionUrl) { $.ajax({ url: actionUrl, success: function() { return true; }});
false
,因为请求是异步的。当请求成功时,我如何返回true
?您可以稍微重构代码,以便成功回调触发下一个操作,该操作取决于真/假结果。例如,如果您当前有以下内容:
function ajaxRefresh(actionUrl) {
$.ajax({
url: actionUrl,
success: function() {
return true;
}});
return false;
}
function ajaxRefresh(actionUrl) {
bool isSucesss=false;
$.ajax({
url: actionUrl,
success: function() {
isSucesss=true;
},
error:function() {
isSucesss= false;
}
});
return isSucesss;
}
function main() {
// some code
if (ajaxRefresh(url)) {
// do something
}
}
您可以将其更改为:
function ajaxRefresh(actionUrl) {
bool isSucesss=false;
$.ajax({
url: actionUrl,
success: function() {
isSucesss=true;
},
error:function() {
isSucesss= false;
}
});
return isSucesss;
}
function main() {
// some code
if (ajaxRefresh(url)) {
// do something
}
}
您还可以将if
测试放在ajax回调函数中,而不是放在doSomething()
函数中。由你决定
或者,您可以发出同步请求,并在请求完成后计算出
ajaxRefresh()
函数的返回值。我不建议在大多数情况下使用回调功能。使用回调功能
回调函数队列:-
beforeSend、error、dataFilter、success和complete选项都接受在适当时间调用的回调函数
那么,这里
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
}});
}
你可以在这里得到更多的细节
在ajax请求未完成之前,您不能返回“true”,因为它是异步的,如您所述。因此,该函数在ajax请求完成之前就离开了
解决方案1
但是有一个解决方法:只需向函数中添加一个回调参数。此函数将在请求完成时执行
解决方案2
您可以返回延迟的jquery
function ajaxRefresh(actionUrl, successCallback) {
$.ajax({
url: actionUrl,
success: successcallback
});
}
现在,您可以使用以下功能:
function ajaxRefresh(actionUrl, successCallback) {
return $.ajax({
url: actionUrl
});
}
有关jquery延迟的更多信息,请参阅。您应该将参数
async
设置为false
。请尝试以下代码:
function otherFunction()
{
ajaxRefresh().success(function() {
//The ajax refresh succeeded!
}).error(function() {
//There was an error!
});
}
我在这方面相对来说是个新手,但这里有一个我提出的建议解决方案,它消除了将
asynch
设置为false或类似设置的需要。只需使用ajax调用的结果设置一个隐藏字段值,而不是检查返回值,而是检查隐藏字段的值是否为true/false(或任何您想要输入的值)
例如:
函数doSomething(){
然后在需要的其他地方调用此doSomething
函数,而不是检查ajax调用的结果,而是查找隐藏字段值:
$.ajax({
...blah blah
},
success: function(results) {
if(results === 'true') {
$('#hidField').val('true');
}
else {
$('#hidField').val('false');
}
}
});
如果您还将ajax调用设置为同步,则这应该可以工作。否则,它将始终返回与原始代码相同的false。从成功和错误回调函数返回true或false(或任何其他内容)将没有帮助,因为这些返回值不会返回到生成
$.ajax()的代码位
call。成功和/或错误回调函数实际上需要直接调用应在true或false值上执行的代码。Eeeck!Async:false将在ajax调用期间锁定浏览器。这通常是一种糟糕的用户体验。好的解决方案需要重构代码以使用回调或函数c从成功/错误函数到继续执行过程并传递ajax调用的结果。是的,你是对的。但我已经准确地回答了这个问题。Artur问了如何使函数返回结果。可用性问题是不可能的。我想每个人都有自己的回答风格。如果有人要这样做的话我想帮助他们理解这一点,而不是仅仅回答字面上的问题。这可能有助于解决这个问题:
doSomething();
var theResult = $('#hidField').val();
if (theResult == 'true') {
...do whatever...
}