javascript - 如何通过列表运行 $.ajax?

标签 javascript jquery ajax

当我多次运行 $.ajax 时,它似乎没有等待 ajax 调用完成就继续运行我的代码。 当我使用 jsonp 时,设置“async: false”不起作用(或者我读过)。我必须使用 jsonp 才能访问 Media Wiki api,因此无法更改它。我是 Javascript 的初学者,这是我可以使用“ promise ”的东西吗?

var articleList = ['Abaft', 'Aspect-oriented%20programming', 'Defecation', 'Feces', 'Perl%20Object-Oriented%20Persistence', 'Poop%20(constellation)', 'Poop%20deck', 'Pooper-scooper', 'Poopy', 'Stern', 'Zoboomafoo'];

function retrieveSummary(jsonp) {
  console.log(jsonp);
}

function fetchSummary() {
  for (var article in articleList) {
    $.ajax({
      url: 'https://en.wikipedia.org/w/api.php?action=parse&page=' + article + '&prop=text&format=json&section=0&callback=?',
      dataType: 'jsonp',
      contentType: 'application/json',
      jsonpCallback: 'retrieveSummary',
    });
  }
}

我得到的输出是“Poop (constellation)”的 jsonp 对象,它位于列表的中间。尽管为articleList 中的每篇文章调用了回调函数,但这是我获得的唯一对象。

最佳答案

查看 jQuery 文档了解如何 $.when()功能有效,我想这可能对你有帮助:)

顺便说一句,避免使用async: false,除非您 100% 确定您需要一个无法使用 $.when().done/then/always 归档的同步调用

正如 @charlietfl 指出的,async: false 不适用于 jsonp 调用。

来自 jQuery 文档:

By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false. Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation

关于javascript - 如何通过列表运行 $.ajax?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38192638/

相关文章:

javascript - 为什么此分析事件跟踪代码不起作用?

javascript - 使用隐藏状态而不是注释或自定义脚本标记来模板化 HTML

jQuery - .load 不工作

javascript - 如何防止通过直接输入浏览器网址栏来查看/下载文本或脚本文件?

javascript - 如果在 React 中单击链接,SlideMenu 不会关闭

javascript - 为什么 location.hash 上的输出不自动刷新?

jQuery - 如何使用自定义属性值选择 tablerow 元素?

javascript - jQuery - 设置按钮标题

javascript - 是否可以仅使用 jquery/ajax 构建推送通知系统?

jquery - 使用 jquery load() 函数的非常困难的脚本不想正常工作