我在一台服务器上有我的PHP编码页面,它返回一个json结果。 php文件名为:getInfoData.php,返回如下。
echo json_encode($v);
不,我可以使用$ .getJSON(??)来读取json并在相同的服务器上运行它,但我需要将php页面放在与调用它的js页面不同的服务器上。
但是当我这样做时,我就会遇到跨域问题。
所以我更改了代码以使用以下(jsonp):
$.ajax({
url: 'FILE_LOCATION_ON_ANOTHER_SERVER',
type: 'GET',
crossDomain: true,
dataType: 'jsonp',
success: function() { console.log("Success"); },
error: function() {console.log('Failed!'); }
});
但是我没有看到任何东西我只是通过我的控制台获得以下内容:
http://www.THEURL.com/FOLDER/FILENAME.php?callback=jQuery171013088115444406867_1332256223342&_=1332256223343
和一条说失败的消息!。
我做错了什么以及如何解决这个问题?
由于
答案 0 :(得分:3)
JSONP实际上不是JSON。这有点像“黑客”。 JSONP实际上是一个JavaScript文件,可以下载并运行。
在PHP页面中,您应该传递callback
参数。你需要在其中“包装”你的JSON。它应该是这样的:
func({json: data})
所以,你的PHP应该是这样的:
echo $_GET['callback'] . '(' . json_encode($v) . ')';
答案 1 :(得分:2)
我经常使用这个,但也许有更好的方法
<?php header('content-type: application/javascript; charset=utf-8');
$data = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
echo htmlspecialchars($_GET['callback']) . '('.json_encode($data).')';
因为我看到你提供了一个回调参数,一切都应该没问题