Javascript jQuery JsonP呈现错误未捕获引用错误:未定义jQuery1910759048246337473_1375193471216

Javascript jQuery JsonP呈现错误未捕获引用错误:未定义jQuery1910759048246337473_1375193471216,javascript,jquery,greasemonkey,Javascript,Jquery,Greasemonkey,我不确定如何处理这个错误,每个请求都有一个唯一的字符串。我请求的jsonP是一个jsonP代理,据我所知,它是按它应该的方式配置的 var url = 'https://phpproxy-dev.herokuapp.com/?url=http://personer.eniro.se/resultat/'+who+'/'+where+'&callback=?'; $.getJSON(url, function (data) { //console.l

我不确定如何处理这个错误,每个请求都有一个唯一的字符串。我请求的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中运行代码。

尝试使用$.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
    }   
});
请看这里的小提琴:
在本例中,我在文本区域输出HTML。

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

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

jQuery在全局作用域中使用唯一名称定义回调函数,如jQuery1910759048246337473_1375193471216

然后,它将脚本添加到文档中,该文档将返回如下所示的代码

jQuery19107590448246337473_1375193471216(<some JSON data here>);
Greasemonkey的问题是代码在沙箱中工作,而这些全局范围实际上是沙箱的全局范围,而不是实际的窗口范围。并且通常无法从外部访问此沙盒。因此,请求的脚本无法调用此回调函数jquery19107590448246337474773_1375193471216


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

@Spokey jQuery为JSONP生成GET请求。正如你所看到的,OP没有使用它。但是他们使用$.getJSON并提供回调=?在URL@Neal:错误在标题中。由于jQuery将创建一个具有正确回调名称的函数,我只能想象您以某种方式更改了服务器脚本中的回调名称。您的代码适合我。使用jQuery1.9.1,它似乎与您的相同。在这种情况下,您需要准确地了解在您的上下文中被认为是全局范围的内容。这就是需要定义回调的地方。如果全局上下文不是窗口,您可能无法使用jQuery发出此ajax请求。新错误:未捕获的语法错误:意外标记:phpproxy-dev.herokuapp.com/:1 parserError:jQuery1910759048246337473\u 1375193471216未被调用。如果您看到我正在运行greasemonkey,它将启动jQuery,这些数字是从哪里来的,但可能是相关联的?错误表明所述函数未在窗口上定义,其中窗口是jQuery用作窗口的任何对象。指定一个特定的回调不应该改变报告为回调的错误以外的错误,因为错误来自同一个地方。@Kristofernolgren检查小提琴,我在发布后更新了它。现在没事了。关于我看到的数字,它们不是来自JSON,它们是jQuery的特定项,因此数字可能有时间戳。未捕获引用错误:jquery1919166778242215514\u 1375195463773未定义?callback=jquery1919166778242215514\u 1375195463773&url=http%3A%2F%2personer.eniro.se%2Fresultat%2Fjohn%2Flondon&=1375195463794:1匿名函数?callback=jquery19166778242215514_1375195463773&url=http%3A%2F%2personer.eniro.se%2resultat%2Fjohn%2Flondon&&u75195463794:1解析器错误:未调用jquery19166778242215514_1375195463773