JQuery ajax调用返回状态码0且为“error”问题

5
我正在尝试调用Petfinder.com以获取我们宠物的列表。网址是http://api.petfinder.com/shelter.getPets?key=xxxxx&id=CA1469&format=json
该网址似乎能够正常返回JSON。但是,当我尝试进行调用时,会出现“错误”和状态码0。我尝试使用jsonp,结果状态码为200,但出现解析错误。如果我改为xml,则结果为状态码0和“错误”。
 $.ajax({

         url: "http://api.petfinder.com/shelter.getPets?key=xxxx&id=CA1469&format=json",
         dataType: "json",
         type: "GET",
         success: function (data) {
             alert("hi");
         },
         error: function (jqXHR, exception) {
             if (jqXHR.status === 0) {
                 alert('Not connect.\n Verify Network.');
             } else if (jqXHR.status == 404) {
                 alert('Requested page not found. [404]');
             } else if (jqXHR.status == 500) {
                 alert('Internal Server Error [500].');
             } else if (exception === 'parsererror') {
                 alert('Requested JSON parse failed.');
             } else if (exception === 'timeout') {
                 alert('Time out error.');
             } else if (exception === 'abort') {
                 alert('Ajax request aborted.');
             } else {
                 alert('Uncaught Error.\n' + jqXHR.responseText);
             }

         }
     });

1
你在控制台中遇到了“同源”错误吗? 你正在使用IE浏览器吗? 跨域请求需要作为JSONP(需要正确的JSONP响应)发送,或者启用CORS,这需要服务器支持CORS并且浏览器支持CORS。 jQuery不支持IE <10中的CORS。 - Kevin B
Trello的API客户端库有一个很好的示例,展示了他们如何处理CORS支持:https://trello.com/1/client.coffee - forivall
可能是ajax jqXHR.status==0修复错误的重复问题。 - Yan Foto
2个回答

2

在服务器发送错误响应时,您需要确保它也同时发送适当的CORS标头。

如果没有发送,浏览器将不允许您的JavaScript代码查看来自该域的任何信息,即使是状态码也不行。


1
您遇到了一个跨域问题,最好的解决方法是在您的Web服务器上设置代理,并通过它路由AJAX调用。

1
正如KevinB所提到的,我认为你指的是CORS而不是XSS。 - Alexander
我正在使用AWS Api Gateway来开发我的应用程序...并且遇到了同样的问题...你能否建议一个首选的CORS策略,以便解决这个错误。我现在正在测试它,使用一个简单的ajax调用,在body标签的'onload'事件上运行。 - Abdeali Chandanwala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接