我可以使用 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 的数据表单

人们通常如何在python中实现jsonp? [关闭]

返回 JSONP 的 Restful api 的节点 HTTP 请求

MVC Web API & jsonp

如何通过 JSONP 或 HTTP 代理访问 Rally REST API 的 JSON 响应?

十React 获取服务器数据: axios插件 fetch-jsonp插件的使用