当AJAX请求成功时如何返回值
How to return value when AJAX request is succeeded
function ajaxRefresh(actionUrl) {
$.ajax({
url: actionUrl,
success: function() {
return true;
}});
return false;
}
函数返回false
,即使请求成功,因为请求是异步的。当请求成功时,我如何返回true
?
应将async
参数设置为false
。试试下面的代码:
function ajaxRefresh(actionUrl) {
var succeed = false;
$.ajax({
async: false,
url: actionUrl,
success: function() {
succeed = true;
}});
return succeed;
}
在ajax请求没有完成之前,您不能返回"true",因为正如您提到的,它是异步的。因此,在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延迟的更多信息,请参阅http://www.erichynds.com/jquery/using-deferreds-in-jquery/.
你可以稍微重构一下你的代码,这样你的成功回调就会触发下一个依赖于true/false结果的操作。例如,如果您当前有如下内容:
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()
函数的返回值。在大多数情况下,我不建议这样做。
我在这方面是一个相对的新手,但这里是我提出的一个建议工作,它消除了将asynch
设置为false或类似的东西的需要。只需用ajax调用的结果设置一个隐藏字段的值,而不是检查返回值,检查隐藏字段的值是否为真/假(或任何您想要放入其中的值)。
的例子:函数doSomething() {
$.ajax({
...blah blah
},
success: function(results) {
if(results === 'true') {
$('#hidField').val('true');
}
else {
$('#hidField').val('false');
}
}
});
然后在其他需要的地方,调用这个doSomething
函数,而不是检查ajax调用的结果,寻找隐藏的字段值:
doSomething();
var theResult = $('#hidField').val();
if (theResult == 'true') {
...do whatever...
}
使用回调函数
回调函数队列:-
beforeend, error, dataFilter, success和complete选项都接受在适当时间调用的回调函数。
so, here
function ajaxRefresh(actionUrl) {
$.ajax({
url: actionUrl,
success: function() {
return true;
}
error:function(){
return false;
}
});
}
你可以在这里获得更多细节
http://api.jquery.com/jQuery.ajax/function ajaxRefresh(actionUrl) {
bool isSucesss=false;
$.ajax({
url: actionUrl,
success: function() {
isSucesss=true;
},
error:function() {
isSucesss= false;
}
});
return isSucesss;
}
- Javascript返回值只在循环中返回一次
- XMLHttpRequest未返回值-状态202
- 根据是否解析了 Promise 从函数返回值
- Angular,函数在(模型)工厂中返回值
- AngularJS错误:提供程序必须从$get工厂方法返回值
- 如何从客户端的数组中获取用户输入和返回值
- Javascript中带有返回值的嵌套函数
- 为变量分配多个nodejs导出返回值时出现问题
- 通过回调从onreadystatechange返回值
- 从Ajax函数返回值
- JavaScript生成器中收益率返回值的解析
- HTML如何根据javascript函数的返回值限制文本输入
- JS Geolocation等待成功后返回值
- 从 AJAX 成功函数返回值
- jQuery AJAX:成功时返回值
- $http请求在node js上-如何成功返回值$http.post
- 当AJAX请求成功时如何返回值
- 如何从jQuery.ajax()中的成功和错误处理程序返回值给父方法?
- jQuery's $.ajax中嵌套成功函数的返回值
- ajax成功返回值复杂