无法将回调函数添加到jquery getJSON

时间:2011-10-26 13:25:39

标签: jquery cross-domain getjson

我正在尝试在jquery中执行跨域请求,其功能类似于this gist

中的功能

我以为我的JSON不正确,但这是我从回复中获得的:

{"status":"OK","errorMessage":"","numberOfResults":10,"suggestions":[{"url":"http://dbpedia.org/resource/Bassiana","label":"Bassiana","owner":0},{"url":"http://dbpedia.org/resource/Julia_Soaemias_Bassiana","label":"Julia Soaemias Bassiana","owner":0},{"url":"http://dbpedia.org/resource/Julia_Bassiana","label":"Julia Bassiana","owner":0},{"url":"http://dbpedia.org/resource/Varius_Avitus_Bassianus_Marcus_Aurelius_Antoninus","label":"Varius Avitus Bassianus Marcus Aurelius Antoninus","owner":0},{"url":"http://dbpedia.org/resource/Bassianus_%28senator%29","label":"Bassianus (senator)","owner":0},{"url":"http://dbpedia.org/resource/Johannes_Bassianus","label":"Johannes Bassianus","owner":0},{"url":"http://dbpedia.org/resource/Julius_Bassianus","label":"Julius Bassianus","owner":0},{"url":"http://dbpedia.org/resource/Bassian_thrush","label":"Bassian thrush","owner":0},{"url":"http://dbpedia.org/resource/Bassianae","label":"Bassianae","owner":0},{"url":"http://dbpedia.org/resource/Bassian","label":"Bassian","owner":0}]}

我该如何让它发挥作用?由于JSON无效,似乎永远不会触发回调。

3 个答案:

答案 0 :(得分:2)

问题不在于它是无效的(虽然通过this site会确认),但它在回调方法中永远不会“包裹”。

查找JSONp

如果您要致电/getMyJSON?callback=myCallback,您的JSONP回复回来,如:

myCallback({"status":"OK","errorMessage":"","numberOfResults" ...);

(请注意,它现在包含在您应该在页面上定义的函数调用中,并准备好处理返回的结果)。

答案 1 :(得分:1)

跨域请求需要使用JSONP。 JSONP请求实际上是作为脚本请求发送的,并且要求您提供回调(和回调参数),以便服务器可以提供一个脚本,其中包含对回调函数的调用内容。使用getJSON调用执行此操作的方法是将&callback=?附加到其他URL参数。这告诉jQuery它必须发出JSONP请求并指示它创建一个调用你的回调的匿名函数。

注意:服务器必须支持JSONP,因为它需要以不同方式处理响应,即作为脚本返回,并将数据作为参数提供给回调。支持通过Javascript直接访问的服务应该支持JSONP。如果该服务不支持JSONP,您需要在您的服务器上代理该请求,您可以在其中以普通JSON的形式请求它,因为您没有跨域浏览器限制。

$.getJSON('http://some.other.dom/controller/action?x=y&callback=?`, function(data) {
    // here the data is the deserialized JSON as an object
});

答案 2 :(得分:0)

这不是jsonp - jsonp包含回调。你看到的要点没有提到跨领域。您将不得不查看该服务,看看您需要做什么才能让它返回jsonp而不是json。

以下是返回我上一次Twitter推送的示例调用:

http://twitter.com/status/user_timeline/rossdargan.json?count=1&callback=JSONPcallbackFunction

如您所见,结果包含在JSONPcallbackFunction中:

JSONPcallbackFunction([{"place":{"bounding_box":{"type":"Polygon","coordinates...