【问题标题】:CORS Error - Ajax request returns intermittent failures with NYTimes APICORS 错误 - Ajax 请求使用 NYTimes API 返回间歇性故障
【发布时间】:2014-07-14 17:35:12
【问题描述】:

我正在向NYTimes Congress API 发出几个 ajax 请求,同时遍历一系列区域(1 到 5)。我平均只能成功返回 2 个请求,其余的返回一个:

XMLHttpRequest cannot load https://api.nytimes.com/svc/politics/v3/us/legislative/congress/members/house/OR/2/current.json?api-key=xxxxxxx. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9001' is therefore not allowed access.

这些失败似乎没有规律可循。即使多次使用相同的_district 号码似乎也会随机失败。

我的代码:

var title_element,
    title_render,
    district_numbers = ['1', '2', '3', '4', '5'],
    element_ids = ['ushd1', 'ushd2', 'ushd3', 'ushd4', 'ushd5'],
    apiKey = 'api-key=xxxxxxxxxxx',
    baseUrl = 'https://api.nytimes.com/svc/politics/v3/us/legislative/congress/members/house/OR/',
    orUsHouseMembers,
    frag;

  for (var i = 0, total_districts = district_numbers.length; i < total_districts; i++) {
      (function (i) {
        var myUrl = baseUrl + district_numbers[i] + '/current.json?' + apiKey;

        $.ajax({
          url: myUrl,
          dataType: 'json',

          success: function (data) {
            console.log('\nSUCCESS: ' + myUrl);
            title_element = document.getElementById(element_ids[i]);        
            title_render = document.createTextNode(data.results[0].name + ' - District ' + data.results[0].district );
            title_element.appendChild(title_render);
          },

          error: function (data) {
            console.log('\nFAIL: ' + myUrl);
          }
        })
      })(i);
  }

我尝试添加 Access-Control-Allow-Origin: '*' 和所有常见的 CORS 内容,但我不认为这是一个真正的 CORS 问题,因为故障过于间歇性

我的代码有问题还是 API 有问题?

【问题讨论】:

    标签: jquery ajax cors asp.net-web-api


    【解决方案1】:

    我的代码有问题还是 API 有问题?

    是的,将 AJAX 的 dataType 选项更改为 jsonp,而不是 json

    dataType: 'jsonp'
    

    当您想要GET 数据时,为了避免CORS 问题,请使用JSONP


    附注:

    请注意,我自己在使用 jsFiddle 制作的小型 demo 中对其进行了测试,它工作正常,只是考虑它现在返回 @987654329 @ - 我假设因为我应该输入一个有效的 api-key,所以你提供了一个假的 (api-key=xxxxxxxxxxx)。

    【讨论】:

    • 谢谢!不幸的是,即使使用 JSONP(并插入我的 api 密钥)它也只返回两个结果:Suzanne Bonamici - District 1 Greg Walden - District 2 Error Error Error
    • @elthatcher 好吧,首先,现在您设法与 API 服务器建立了成功的通信,其次,现在的问题是您尝试从 API 获取的数据 - 看起来像根据您的查询,没有此类数据。
    • 使用 [3,4,5,4,5] 查询时数据似乎存在:Earl Blumenauer - District 3 Peter A. DeFazio - District 4 Kurt Schrader - District 5 Error Error
    • 不幸的是,我不需要任何错误 - 即返回五个 'data.results[0].name + ' - District ' + data.results[0].district' 组合来考虑问题已解决。仍然有随机失败,只返回了两个请求而不是五个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 2021-05-28
    • 2017-04-13
    • 2011-10-27
    相关资源
    最近更新 更多