繁体   English   中英

承诺推迟Ajax API jQuery

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM