2013-09-23 72 views
-1

我想在服务器上放置一个静态jsonp文件(jsonp-test.php),但我无法读取它。这是我有:如何从服务器提供静态JSONP文件?

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

jsonp-test.php听起来不像一个静态文件。 'mycallback'是硬编码的,还是脚本使用'callback'查询参数来设置?这将继续是一个PHP脚本,或者你打算将它转换为一个静态文件? –

+0

@MichaelGeary'mycallback'在jsonp-test.php中被硬编码。目前jsonp-test.php中没有动态信息。 – user1448031

回答

0

因此,有几件事情......当你说“我无法阅读它”时,你能确认你实际上是从正确的地址请求JSONP吗?例如,您是否可以在浏览器选项卡中打开URL

http://www.remote-server/jsonp-test.php?callback=mycallback 

并查看JSONP。如果是这样,那么我认为你的JSONP格式的第二个问题是不正确的。 myCallBack函数实际上是被调用函数的名称,因此,您的JSON的内容应包含在括号与半,像下面

mycallback(
    [ 
    {"key":"1","val":"test1"}, 
    {"key":"2","val":"test2"} 
    ] 
); 
+0

是的,我可以在浏览器中打开URL。我也按照你的建议对JSONP进行了修改,但是我仍然无法从jQuery中读取它。 – user1448031

0

首先,布拉德利解释说,修复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静态文件要么。