0

我不确定如何处理这个错误,每个请求都有一个唯一的字符串。我请求的 jsonP 是一个 jsonP 代理,据我所知,它已按应有的方式进行配置。

var url = 'https://phpproxy-dev.herokuapp.com/?url=http://personer.eniro.se/resultat/'+who+'/'+where+'&callback=?';
        $.getJSON(url, function (data) {
            //console.log(data)
        });

回复:

jQuery19107590448246337473_1375193471216({"status":{"http_code":200},"contents":"//an html page wrapped in a json-object, I can't post it because it hangs chrome when I try to push the code button i stackoverflow. "})

我在 https 页面上运行greasemonkey 中的代码。

4

3 回答 3

3

jQuery 中的 JSONP 调用的工作方式如下:

jQuery 在全局范围内定义回调函数(具有唯一名称,如jQuery19107590448246337473_1375193471216)。

然后它将脚本添加到文档中,预计会返回如下代码

jQuery19107590448246337473_1375193471216(<some JSON data here>);

Greasemonkey 的问题在于您的代码在沙箱中工作,而这些全局范围实际上是沙箱的全局范围,而不是实际的窗口范围(unsafeWindow)。而且这个沙箱通常不能从外部访问。
结果,请求的脚本调用此回调函数失败jQuery19107590448246337473_1375193471216

然而,这里的好处是您根本不需要 JSONP 调用。
JSONP 是作为跨域限制的解决方法而开发的。但是 GreaseMonkey 为您提供了很好的 GM_xmlhttpRequest 函数,它没有这样的限制。
因此,您可以直接将 GET 请求从您的脚本发送到其他域,而无需使用 JSONP 包装器。

于 2013-08-04T16:44:23.603 回答
2

尝试使用$.ajax并传递您需要的参数:

var who = "john";
var where = "london";

$.ajax({
    url:'https://phpproxy-dev.herokuapp.com/',
    data: {
        'url':'http://personer.eniro.se/resultat/'+who+'/'+where
    },
    dataType: 'jsonp',
    jsonp: 'callback',
    error: function(jqXHR, textStatus, errorThrown){
        console.log(textStatus + errorThrown);
    },
    success: function(data){
        console.log(data); //data.contents has the HTML
    }   
});

请参阅此处的小提琴:http: //jsfiddle.net/RaphaelDDL/mZG83/(在此示例中,我在 textarea 上输出 HTML)。

于 2013-07-30T14:32:59.770 回答
2

显然,Greasemonkey 不支持 jsonP。我在禁用 xhr 块的 GM_xmlhttpRequest 方面取得了更大的成功。

于 2013-07-30T16:53:19.870 回答