我正在尝试使用以下代码向其他域发送帖子请求
$.ajax({
url: "http://domainName.com/api/v1/statistics/1",
crossDomain: true,
type: 'POST',
dataType: 'jsonp'
});
但是它给了我错误(404)并且似乎它将请求视为获取请求,无论什么
答案 0 :(得分:4)
您无法通过JSONP进行POST。你只能使用GET。
域名还应包含:http://
以访问外部文档。我希望你知道你必须创建一个使用JSONP的函数。默认的回调函数称为callback
,因此您的响应应该是:
callback({ "data" : "data"});
回调函数?callback=?
将自动添加到URL中。如果你有重写,你必须使用$_GET['callback']
来获得回调函数。
来自jQuery docs:
“jsonp”:使用JSONP加载JSON块。添加一个额外的 “?回调=?”到URL的末尾以指定回调。禁用 通过将查询字符串参数“_ = [TIMESTAMP]”附加到缓存来缓存 URL除非cache选项设置为true。
修改强>
您的请求将类似于:
$.ajax({
url: "http://domainName.com/api/v1/statistics/1",
crossDomain: true,
dataType: 'jsonp',
jsonp : "mycallback",
success : function(data){
console.log(data.thiskey); // Will log OK
}
});
现在API的请求URL将如下所示(jQuery将附加?callback=mycallback
):
http://domainName.com/api/v1/statistics/1?callback=mycallback
在您的响应中,您必须创建一个函数调用,以便调用jQuery Ajax函数。这个结果需要看起来像这样:
mycallback({ thiskey : "OK" }); // The data in this call can be retreived at the success function
在成功功能中,您可以检索数据,如:
success : function(data){
console.log(data.thiskey); // Will log OK
}
答案 1 :(得分:1)
CORS
根据Niels的回答,您必须明白跨域数据发送取决于“目标”域的CORS policy
基本上,“外来”ajax请求默认被服务器的中间件拒绝,除非你使用某种CORS中间件来创建一些端点来访问
如果您发现404
错误,则应考虑使用Rack-CORS之类的内容为您的应用提供跨域来源支持(允许跨域异步数据传输)< / p>