1

我开发了一个使用 JSON 服务的移动网站。我使用 JSONP,因为它是跨域的。它正在工作并突然坏了,我无法理解为什么。这是我可以在浏览器中检查的内容:

我的 Javascript 调用:

$.ajax({
url: apiBaseURL + "getoperators?appKey=" + appKey,
dataType: 'jsonp',
success: function(data) {
    console.log(data);
},
    error: function(jqXHR, textStatus, errorThrown) {             }
});

当我查看响应时,它的格式似乎正确,如下所示:

{"GetOperatorsResult":{"Error":"","Results":[{"City":"Cape Town","IsPublic":true,"Mode":"Bus","Name":"Golden Arrow" },{"City":"开普敦","IsPublic":true,"Mode":"Shuttle","Name":"Jammie Shuttle"},{"City":"开普敦","IsPublic": true,"Mode":"Train","Name":"Metrorail"},{"City":"Cape Town","IsPublic":true,"Mode":"Bus","Name":"MyCiti" }],"状态":"成功"}}

这是网络审计:

请求地址:http://api.wimt.co.za/v1/json/public.svc/getoperators?appKey=EB478338-73C7-483F-8AB4-B4DE2219D4DC&callback=jQuery18208015921225305647_1350479608882&_=1350479608950 请求方法:GET 状态码:2 OK Headersview源接受:/ Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en;q=0.8 Cache-Control:max -age=0 Connection:keep-alive Host:api.wimt.co.za Referer:http://localhost:8300/index.html User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.4 (KHTML , 如 Gecko) Chrome/22.0.1229.94 Safari/537.4 查询字符串参数查看 URL 编码的 appKey:EB478338-73C7-483F-8AB4-B4DE2219D4DC 回调:jQuery18208015921225305647_1350479608882 _:1350479608950 charset=utf-8 日期:2012 年 10 月 17 日星期三 13:13:43 GMT 服务器:Microsoft-IIS/7.5 X-Powered-By:ASP.NET

我们距离发布还有 1 天,但运行良好的东西已经坏了,我一辈子都无法弄清楚是什么。错误可能在 web.config 中,但我在那里有所有正确的标头/端点。

有人请帮忙。谢谢!

4

1 回答 1

2

似乎远程 API 不再发送 JSONP,而是发送纯 JSON。在有效的 JSONP 调用中,响应必须包含在回调名称中:

jQuery18208015921225305647_1350479608882({"GetOperatorsResult":{"Error":"","Results":[{"City":"Cape Town","IsPublic":true,"Mode":"Bus","Name":"Golden Arrow"},{"City":"Cape Town","IsPublic":true,"Mode":"Shuttle","Name":"Jammie Shuttle"},{"City":"Cape Town","IsPublic":true,"Mode":"Train","Name":"Metrorail"},{"City":"Cape Town","IsPublic":true,"Mode":"Bus","Name":"MyCiti"}],"Status":"Success"}})

您应该联系 API 的所有者或阅读文档以了解如何指定 JSONP 调用。

于 2012-10-17T13:56:43.900 回答