我在一个函数中有以下逻辑,需要根据从ajax调用返回的数据返回一个值,但是,我需要在成功函数之后进行处理。
var result;
console.log("First");
$.ajax ({
dataType: "jsonp",
url: url,
async: false,
success: function(data) {
result = data;
console.log("Result: " + result);
console.log("Second");
},
error: function(err) {
console.log(JSON.stringify(err))
}
});
console.log("Third");
console.log("Data: " + result);
我希望在控制台中看到以下内容
首先 结果:[object Object] 第二 第三 数据:[对象对象]
但是,我在控制台中看到以下内容 第一 第三 数据:未定义 结果:[object Object] 第二
当它需要调用成功函数时,它似乎实际上是异步或异步执行。
我尝试通过添加async:false使其不异步。有没有办法在执行成功函数后执行ajax调用后执行跟随代码。我想返回一个布尔值,具体取决于数据返回到容纳此ajax调用的函数。
在论坛上我可以找到类似的情况,但他们不会在ajax调用和成功函数之后询问关于执行代码的具体问题。
答案 0 :(得分:1)
数据类型jsonp不支持async:false
https://api.jquery.com/jQuery.ajax/ 跨域请求和dataType:“jsonp”请求不支持同步操作。
现在你知道的话应该很容易解决。
答案 1 :(得分:0)
您需要使用在成功回调结束时调用的函数。例如。 :
var result;
console.log("First");
$.ajax ({
dataType: "jsonp",
url: url,
async: false,
success: function(data) {
result = data;
console.log("Result: " + result);
console.log("Second");
afterSuccess();
},
error: function(err) {
console.log(JSON.stringify(err))
}
});
var afterSuccess = function() {
console.log("Third");
console.log("Data: " + result);
};
请注意,不使用范围较高的result
变量会更干净,而是将结果作为参数传递给afterSuccess