3

简单的问题,如果我有像这样的静态文件(使用 mockJSON web 生成的 JSON)

http://www.webwrx.sk/clients/data.json.txt

我需要对此文件做什么才能将其更改为 JSONP?我需要以某种方式修改它吗?像 api.flickr.com 这样的文件有什么不同?

http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any%20&format=json&jsoncallback= ?

我什至在该文件中添加了 ():

http://www.webwrx.sk/clients/data2.json.txt

仍然以下代码不起作用:

    var params = _.extend({
        'method': 'GET',
        'url': this.url,
        'cache': true,
        'dataType': 'jsonp',
        processData: true
    }, options);

    return $.ajax(params);

感谢您的任何帮助。

4

1 回答 1

5

JSON 和 JSONP 格式之间的唯一区别是后者中存在函数调用。

JSON:

[ "foo", "bar" ]

JSONP:

callback([ "foo", "bar" ])

确保您在代码中定义了该名称的函数(此处callback为:),因为它将被调用:

function callback(jsondata) {
  console.log("I got this:", jsondata)
}

jQuery 抽象了回调命名的东西,所以你可以简单地使用 "jsoncallback=?" 在 URI 中(假设服务器足够灵活,可以知道根据参数命名函数),并将匿名函数传递给 jQuery 调用。jQuery 会将函数分配给自动生成的随机名称,然后用该名称替换 URI 中的问号。但是,如果您正在读取静态文件,则不能这样做(它将具有固定的函数名称,因此无法将其动态更改为 jQuery 传递给它的自动生成名称)。是一个使用 jQuery 的工作示例(不是我的)。

于 2012-12-06T00:27:54.123 回答