我想让这个函数返回,或者ajax调用是否成功。有什么方法可以做到这一点吗?我的代码不会这样做。
function myFunction(data) {
var result = false;
$.ajax({
type: "POST",
contentType: "application/json",
dataType: "json",
url: "url",
data: data,
error: function(data){
result = false;
return false;
},
success: function(data){
result = true;
return true;
}
});
return result;
}
答案 0 :(得分:4)
不幸的是,您无法将值返回到包装异步回调的函数。相反,您从AJAX请求中成功回调将数据和控制权移交给另一个函数。我在下面演示了这个概念:
myFunction的定义:
// I added a second parameter called "callback", which takes a function
// as a first class object
function myFunction(data, callback) {
var result = false;
$.ajax({
type: "POST",
contentType: "application/json",
dataType: "json",
url: "url",
data: data,
error: function(data){
result = false;
// invoke the callback function here
if(callback != null) {
callback(result);
}
// this would return to the error handler, which does nothing
//return false;
},
success: function(data){
result = true;
// invoke your callback function here
if(callback != null) {
callback(result);
}
// this would actually return to the success handler, which does
// nothing as it doesn't assign the value to anything
// return true;
}
});
// return result; // result would be false here still
}
回调函数定义:
// this is the definition for the function that takes the data from your
// AJAX success handler
function processData(result) {
// do stuff with the result here
}
调用myFunction:
var data = { key: "value" }; /* some object you're passing in */
// pass in both the data as well as the processData function object
// in JavaScript, functions can be passed into parameters as arguments!
myFunction(data, processData);
答案 1 :(得分:1)
您可以在AJAX配置中指定async: false
,但文档指出这也将在AJAX调用期间锁定浏览器,因此不建议这样做。
答案 2 :(得分:1)
无需回电。您可以使用async属性来实现此目的。
function myFunction(){
var retVal;
$.ajax({
url:url,
method: GET/POST,
data: data,
async: false,
success:function(response) {
retVal = response;
}
});
return retVal;
}
答案 3 :(得分:0)
不,myFunction
无法返回ajax调用的成功,因为ajax调用是异步完成的。
您的代码将按此顺序执行:
var result = false;
$.ajax
将请求发送给服务器。return result
(仍设为false)。result = false
或result = true
的成功或错误处理程序。处理此问题的正确方法是将任何依赖于ajax代码结果的代码移动到成功和错误函数中。
答案 4 :(得分:0)
添加这个帮助你的属性
async: false