Promise deferred ajax api jQuery

Promise deferred ajax api jQuery

本文关键字:jQuery api ajax deferred Promise      更新时间:2023-09-26

我不太理解承诺/延期。。。我有这样的东西:

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(…)'语句放入您在promise上注册的两个回调函数中。then(..,..).

您必须记住,promise回调函数只有在ajax调用完成时才会被调用。但是,您的脚本不会等到这种情况发生,并且"console.log(msg);"在ajax调用返回之前执行。

这是JavaScript非阻塞性的一个很好的例子。

要了解更多详细信息,请查阅JS事件循环上的资源:https://thomashunter.name/blog/the-javascript-event-loop-presentation/了解事件循环