0

因此,我编写了一个 WordPress 插件来生成一个包含最新 X 文章的 JSON 文件,之后可以从 URL 访问该文件,然后使用 CloudFront 对其进行缓存。

所以,我像这样(在浏览器中)访问我的文件:http: //mm.site.com/wp-content/uploads/plug/plug.json

我得到了我的 JSON 格式响应文件:

{"id":55142,"title":"Un nuevo modelo productivo para Espa\u00f1a","url": ....

现在,这是我用来以异步模式访问文件的 js 代码:

var jqXHR = $.ajax({
    type: 'GET',
    url: 'http://mm.site.com/wp-content/uploads/plug/plug.json',
    contentType: "application/json",
    dataType: 'jsonp'
});

jqXHR.done(function(json) {
       console.log(json);
    })
    .error(function(e) {
       console.log(e);
    })
    .always(function(test) {
        console.log(test);
    });

现在,古玩部分是在“网络”选项卡(Firebug 或 Chrome 开发工具)下,我看到了请求,它以200 Status Code和文件内容结尾,但是,我在 中看不到响应.done(),所以我可以' t 访问和使用它。

任何想法为什么会这样?

更新

json而不是jsonp, 不会因为cross-origin control. 请记住,我从 Amazon 的 CloudFront 提供文件。我尝试修复它,但没有运气,所以除非你有其他选择,否则我别无选择,只能使用jsonp

4

1 回答 1

1

编辑:正如@Felix Kling 所指出的,done确实将该函数注册为回调,主回调是一个 jQuery 处理程序,如下所示:

?callback=jQuery19104353667694941068_1372008424415&foo=bar

静态文件将无法正确响应此调用,因为jQuery会动态生成处理程序名称。

jsonpCallback: "fixedName"如果静态文件格式为 ,则设置将起作用fixedName({ .. some variable ..})


原始回复:

jsonp不触发done方法。它附加一个script标签,如:

<script type="text/javascript" src="http://anothersite.com/?callback=whatToDoWhenDone"></script>

预期的响应将是调用的 JS 代码whatToDoWhenDone和作为参数的 JSON 对象:

whatToDoWhenDone({"id":55142,"title":"Un nuevo modelo productivo para Espa\u00f1a","url": .... });

如果您不需要使用jsonp,只需将其更改为json.

于 2013-06-23T05:24:20.663 回答