JQuery Async成功

时间:2014-05-08 22:35:17

标签: javascript jquery ajax asynchronous

我在一个函数中有以下逻辑,需要根据从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调用和成功函数之后询问关于执行代码的具体问题。

2 个答案:

答案 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

相关问题