如何从服务器提供静态JSON文件?

时间:2013-09-23 01:57:17

标签: jquery json jsonp

我试图在服务器中放置一个静态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());
});

我做错了什么?

2 个答案:

答案 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