[英]Promise deferred ajax api jQuery
我不太了解诺言/延期...我有这样的事情:
function callAjax() {
return $.ajax({
type: 'post',
dataType: 'jsonp',
data: {status: status, name: name},
url: '/test',
xhrFields: {
withCredentials: true
}
});
}
function connectAjax() {
var msg = 'doesnt work';
var promise = callAjax();
promise.then(function(data, textStatus, xhr) {
msg = 'it worked !';
}, function(data, textStatus, xhr) {
msg = 'it failed !';
});
console.log(msg); // output 'doesnt work'
}
我尝试了很多不同的方法(总是,已完成等),但无法使其正常工作。
我使用jsonp,但我的请求不是跨域的。 我期望服务器发出500错误提示。
为了使您的示例正常工作,您必须将'console.log(...)'语句放在通过.then(..,..)在promise上注册的两个回调函数的内部。
您必须记住,仅当ajax调用完成时,才会调用promise回调函数。 但是,您的脚本不会等到这种情况发生,并且才会显示'console.log(msg);'。 在ajax调用返回之前执行。
这是JavaScript非阻塞性质的一个很好的例子。
要了解更多详细信息,请查看JS事件循环上的资源: https : //thomashunter.name/blog/the-javascript-event-loop-presentation/ 了解事件循环
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.