jQuery .post不会在完成和失败时返回数据

时间:2017-12-27 23:56:26

标签: javascript jquery ajax post

我在制作jQuery AJAX请求时遇到问题,并在.done和.fail方法中获取数据。以下是调用AJAX请求代码的代码:

async function doSomething(){
    const addressValid = await isAddressValid(form.address1.value, form.address2.value, form.city.value, form.state.value, form.zip.value);
    if(!addressValid) return
}

以下是请求代码:

export default (address1, address2, city, state, zip) => {
    console.log(`Checking address`);
    return $.post('/api/validate', {
            address1,
            address2,
            city,
            state,
            zip
        })
        .done(function(data, status, xhr){
            // Address is valid
            return true;
        })
        .fail(function(jqXHR, textStatus, errorThrown ){
            // Address is invalid or API is down, etc
            return false;
        });
}

我的问题是.done()和.fail()中的return语句不起作用。在isAddressValid()之后,addressValid要么“好又好”。如果地址好,或什么都没有。这有多个问题 - 首先是它完全忽略了我的return true;。第二个是当地址无效时,服务器返回400,并且根本不返回addressValid。

https://api.jquery.com/jquery.post/

  

从jQuery 1.5开始,所有jQuery的Ajax方法都返回了一个超集   XMLHTTPRequest对象。这个jQuery XHR对象,或者" jqXHR,"   $ .get()返回实现Promise接口,全部提供   Promise的属性,方法和行为(请参阅Deferred   对象以获取更多信息)。

所以看起来我正在做的事应该起作用。我在想我的布尔返回值会解决这个问题,但事实并非如此。我过去用promises(不是jQuery)完成了这个。例如,使用request-promise来请求某些内容,返回响应并将其存储在变量中。

非常感谢任何协助。

1 个答案:

答案 0 :(得分:2)

我的猜测是由于jQuery的类似承诺 jqXHR对象。

await关键字需要一个承诺,并会使用标准then(可能是catch)方法来确定结果。

试试这个

return $.post(...).then(() => true, () => false)

或者,使用除jQuery之外的其他东西返回实际的Promise实例。即使是原生的fetch API也可能更适合。