如何从包装函数返回javascript ajax调用的结果?

时间:2014-08-26 12:59:34

标签: javascript jquery ajax asynchronous

标题可能有点奇怪,但我会尝试解释。

我进行API调用以验证某些数据。为此,我使用以下函数:

function validateAddress(address) {
    var validationURL = "/api/validateAddress/"+address;

    $.getJSON(validationURL, function(data, textStatus, jqXHR){
        if (textStatus === "success") {
            return data.isValid
        }
    }));
}

// And then in other parts of the code I want to do something like:
if (validateAddress(address)) {
    // do something awesome right here..
}

这个问题当然是异步调用,导致validateAddress()不返回任何内容,因为它在API调用返回任何结果之前结束。

那么我怎样才能真正使validateAddress()返回api调用的结果?欢迎所有提示!

2 个答案:

答案 0 :(得分:1)

你几乎没有选择:

  • 你可以将参数传递给jQuery ajax函数以使调用同步(但你不能使用getJSON,你需要直接使用$.ajax并传递它async: false)< / LI>
  • 您可以将回调传递到validateAddress函数,作为请求完成时您将调用的第二个参数
  • 您可以从函数validateAddress返回$.getJSON调用的返回值,因为它是一个承诺,您可以使用.done()将代码附加到该代码(此示例在此处{{ 3}})

答案 1 :(得分:1)

如下:

function validateAddress(address) {
    var validationURL = "/api/validateAddress/"+address;

    return $.getJSON(validationURL);
}

然后像:

一样使用它
validateAddress("myaddress").done(function(response) { 
   // do my stuff here
});