我可以使用 JSONP 访问任何 API,还是 API 需要专门支持它?
Posted
技术标签:
【中文标题】我可以使用 JSONP 访问任何 API,还是 API 需要专门支持它?【英文标题】:Can I access any API with JSONP or does the API need to specifically support it? 【发布时间】:2015-03-07 09:11:47 【问题描述】:我正在尝试从我的网站 foo.com 访问 bar.com 的 API。 Bar.com 不允许 CORS,我不知道他们是否正式支持 JSONP。
我仍然可以通过 JSONP(使用 jQuery)访问 API,还是网站明确需要支持它?
注意,这是我的 AJAX 请求:
$.ajax(
url: 'https://api.example.com',
jsonp: 'callback',
dataType: 'jsonp',
data:
'command' : 'abc',
'partnerName' : 'def',
'partnerPassword' : 'ghi',
'partnerUserID' : 'jkl',
'partnerUserSecret' : 'mnop'
,
error: function (response)
console.log(response);
return false;
,
success: function (response)
console.log(response);
return false;
);
,
我从 Chrome 中得到:
Uncaught SyntaxError: Unexpected token :
【问题讨论】:
网站需要支持它才能正常工作。 【参考方案1】:这是因为 JSONP 所做的是尝试评估来自 API 端点的代码。
如果调用的结果是,比方说
"result": "OK"
然后,为了使 JSONP 工作,服务器必须以这种方式响应它:
callback("result": "OK")
因为 oyu 在您的 ajax 调用中将属性 jsonp
定义为 callback
。
【讨论】:
嗯...我认为真正的问题是 API 不支持 JSONP @JustinCloud:是的,这就是重点:) 我的回答是解释为什么你需要这种支持:)以上是关于我可以使用 JSONP 访问任何 API,还是 API 需要专门支持它?的主要内容,如果未能解决你的问题,请参考以下文章
使用 jquery jsonp 访问 Coursera api 的数据表单
返回 JSONP 的 Restful api 的节点 HTTP 请求