2012-03-20 51 views
2

我有一个服务器返回一个json结果我的PHP编码页。 php文件叫做:getInfoData.php,返回如下。PHP,jQuery Ajax和json通过跨域返回

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 

和一条消息说失败!

我在做什么错,以及如果我可以解决这个问题?

谢谢

回答

3

JSONP实际上并不是JSON。这有点“黑客”。 JSONP实际上是一个JavaScript文件,它被下载并运行。

在您的PHP页面中,您应该通过callback参数。你需要“包装”你的JSON。它应该是这样的:

func({json: data}) 

所以,你的PHP应该是这样的:

echo $_GET['callback'] . '(' . json_encode($v) . ')'; 
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).')'; 
,因为我看到了

你提供了一个回调参数一切都应该没问题

+0

JSONP实际上并不是JSON,它是JavaScript文件被添加到脚本标记。您应该使用'application/javascript' MIME来代替。 – 2012-03-20 15:19:02

+0

@火箭泰克的建议:) – 2012-03-20 15:23:05

+0

感谢您的回复,在两个相似的地方 – 2012-03-20 16:19:20