【发布时间】: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