所以,我写了一个WordPress插件来生成一个JSON文件,其中包含最新的X文章,可以从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()
中的响应,因此我无法访问和使用它。
为什么会有这样的想法?
json
代替jsonp
,由于cross-origin control
而无法执行此操作。请记住,我从亚马逊的CloudFront服务该文件。我尝试修复它,但没有运气,所以除非你有其他选择,否则我别无选择,只能使用jsonp
答案 0 :(得分: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
。