在jquery中调用jsonrpc服务时出错

时间:2014-08-18 05:30:33

标签: jquery firefox

我有一个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上。 它说"跨源请求被阻止"。如何解决这个问题?

1 个答案:

答案 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发出请求,然后返回结果。