我有一个jsonrpc Web服务,它部署在我的redhat linux AMI上。我可以在python中访问此服务,如下所示:
>>> import jsonrpclib
>>> server=jsonrpclib.Server(redhat_linux_ami_jsonrpc)
>>> x=server.addmicroelement('test test test')
>>> x
u'first insert'
其中,redhat_linux_ami_jsonrpc = jsonrpc服务托管在redhat linux AMI上
但是当我尝试在jquery中调用它时,它可以在IE中运行但在Firefox中失败。我写的代码如下:
var req = {jsonrpc:'2.0', method: 'addmicroelement',id:(new Date).getTime()};
req.params=['new new new'];
$.support.cors = true;
$.ajax({
crossDomain: true,
url: redhat_linux_ami_jsonrpc,
data: JSON.stringify(req),
type: "POST",
contentType: "application/json",
success: function(rpcRes) {
alert(rpcRes.result);
},
error: function(err, status, thrown) {
alert(status);
}
});
其中,redhat_linux_ami_jsonrpc = jsonrpc服务托管在redhat linux AMI上。 它说"跨源请求被阻止"。如何解决这个问题?
答案 0 :(得分:0)
"问题"是出于安全原因,不再允许这样的跨域请求。
可能的解决方案是使用跨源资源共享(CORS),虽然我还没有这方面的经验:
http://enable-cors.org/
(从https://stackoverflow.com/a/18509333/1245352获得)
另一种可能性是使用{dataType: 'jsonp'}
,这是带填充的JSON。不幸的是,这会自动将您的请求设置为'GET'
,而不是'POST'
,这是您当前正在使用的。可能的解决方法是更改您的Web服务以使用'GET'
方法。还有一堆黑客将数据发布到jsonp:Post data to JsonP
您还可以尝试使用php脚本包含的curl
发出请求,然后返回结果。