【问题标题】:jQuery .post doesn't return data in done and failjQuery .post 不返回数据并失败
【发布时间】:2018-06-08 13:23:54
【问题描述】:

我在发出 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() 中的返回语句不起作用。在 isAddressValid() 之后,如果地址是好的,addressValid 要么是“OK”,要么什么都不是。这有多个问题 - 第一个是它完全无视我的return true;。二是地址无效时,服务器返回400,对addressValid什么也不返回。

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

从 jQuery 1.5 开始,所有 jQuery 的 Ajax 方法都返回一个超集 XMLHTTPRequest 对象。这个 jQuery XHR 对象或“jqXHR” $.get() 返回的实现了 Promise 接口,给出了一切 Promise 的属性、方法和行为(参见 Deferred 对象以获取更多信息)。

所以看起来我正在做的事情应该有效。我认为承诺将通过我的布尔返回值来解决,但事实并非如此。我过去用 Promise(不是 jQuery)做到了这一点。例如,使用 request-promise 请求某些内容,返回响应并将其存储在变量中。

不胜感激。

【问题讨论】:

  • 如果你console.log('true')而不是尝试退货,你会得到什么?
  • @Spartacus 抱歉,忘了提—— .done() 和 .fail() 确实会执行。所以对于你的问题,当我做console.log('true'); 时,我在控制台中看到true
  • @CBroe 我认为这看起来也像重复,但事实并非如此。 OP 在这方面做得很好

标签: javascript jquery ajax post


【解决方案1】:

我猜这是由于 jQuery 的 promise-like jqXHR 对象。

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

试试这个

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

或者,使用返回实际Promise 实例的jQuery 以外的东西。甚至原生的fetch API 也可能更适合。

【讨论】:

  • 啊哈,做到了。看起来.then() 正在按照api.jquery.com/deferred.then 进行成功和错误回调?谢谢你顺便说一句@Phil
猜你喜欢
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
相关资源
最近更新 更多