我试图在服务器中放置一个静态jsonp文件(jsonp-test.php),但我无法读取它。这就是我所拥有的:
mycallback[
{"key":"1","val":"test1"},
{"key":"2","val":"test2"}
]
这就是我试图阅读它的方式:
var url = "http://www.remote-server/jsonp-test.php?callback=mycallback";
$.getJSON(url, function(data) {
alert(data.toSource());
});
我做错了什么?
答案 0 :(得分:0)
所以,有几件事......当你说“我无法阅读它”时,你能否确认你实际上是从正确的地址请求JSONP?例如,您可以打开URL
http://www.remote-server/jsonp-test.php?callback=mycallback
在浏览器标签页中查看JSONP。如果是这样,那么我认为您具有JSONP格式的次要问题是不正确的。 mycallback实际上是被调用的函数的名称,因此你的JSON的内容应该被包含在半开的parens中,如下所示
mycallback(
[
{"key":"1","val":"test1"},
{"key":"2","val":"test2"}
]
);
答案 1 :(得分:0)
首先,正如Bradley所解释的那样,修复JSONP文件的语法 - 它需要这些括号。那是因为文件需要是有效的JavaScript代码。 JSONP只是使用JavaScript函数调用从脚本文件加载JSON数据的惯例。
如果文件保持静态 - 特别是如果mycallback
函数的名称是硬编码的 - 那么您应该将其视为调用全局函数的脚本文件,因为它实际上是。定义名为mycallback
的全局函数,并使用$.getScript()
加载静态JSONP / JavaScript文件:
window.mycallback = function( data ) {
alert( data.toSource() );
};
$.getScript( 'http://www.remote-server/jsonp-test.php' );
请注意,静态文件也不需要?callback=mycallback
。