Javascript JQuery异步成功

Javascript JQuery异步成功,javascript,jquery,ajax,asynchronous,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);

我在一个函数中有以下逻辑,该函数需要根据从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);
我希望在控制台中看到以下内容

首先 结果:[对象] 第二 第三 数据:[对象]

但是,我在控制台中看到以下内容 弗斯特 第三 数据:未定义 结果:[对象] 第二

看起来它实际上是异步执行的,或者说是在需要调用success函数时异步执行的

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);
我已经尝试通过添加async:false使其不异步。是否有一种方法可以让ajax调用后的代码在成功函数执行后执行。我想根据返回给包含此ajax调用的函数的数据返回一个布尔值


查看论坛,我可以发现类似的情况,但他们没有问我关于在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);
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

数据类型jsonp不支持异步:false

跨域请求和数据类型:“jsonp”请求不支持同步操作


现在您知道了,解决这个问题应该很容易。

不要回答您的问题,因为异步函数无法解决这个问题。这就是异步的意思。依赖于结果的所有操作都必须在回调函数中完成,而不是在回调函数之后。@Barmar我认为
async:false
会阻止I/o,直到请求完成。这是真的。但是他的问题是如何在不使用
async:false
@Barmar:他在哪里问不使用
async:false
怎么做。他还说“我尝试添加async:false”,我解释为这不是他试图运行的实际代码的一部分。如果它更干净,请这样做。但这不是这个问题的重点。我们可以继续讨论“更干净”的事情,比如从不尝试使用同步ajax请求你不是在做一个同步的JSONP请求吗?啊,这显然是个问题。非常感谢。