【问题标题】:How to return result of javascript ajax call as from the wrapping function? [duplicate]如何从包装函数返回javascript ajax调用的结果? [复制]
【发布时间】:2014-08-26 12:59:33
【问题描述】:

标题可能有点奇怪,但我会尽力解释。

我调用 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 调用的结果呢?欢迎所有提示!

【问题讨论】:

  • 你不能把它称为“成功”吗?
  • 您正在寻找的概念是 callback-function,最近 promise 也越来越常见于这个问题。 $.getJSON 返回一个承诺,但也可以与回调一起使用。

标签: javascript jquery ajax asynchronous


【解决方案1】:

你有几个选择:

  • 您可以将参数传递给 jQuery ajax 函数以使调用同步(但您不能使用getJSON,您需要直接使用$.ajax 并将其传递给async: false
  • 您可以将回调作为第二个参数传递给validateAddress 函数,您将在请求完成时调用该参数
  • 您可以从函数 validateAddress 中返回 $.getJSON 调用的返回值,因为它是一个承诺,您可以使用 .done() 将您的代码附加到它上面(示例在这里 http://api.jquery.com/jQuery.getJSON/#jqxhr-object)李>

【讨论】:

    【解决方案2】:

    怎么样:

    function validateAddress(address) {
        var validationURL = "/api/validateAddress/"+address;
    
        return $.getJSON(validationURL);
    }
    

    然后像这样使用它:

    validateAddress("myaddress").done(function(response) { 
       // do my stuff here
    });
    

    【讨论】:

    • in done 我们有回复吗??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 2017-04-13
    • 1970-01-01
    相关资源
    最近更新 更多