PHP,jQuery Ajax和json通过跨域返回

时间:2012-03-20 15:13:24

标签: php jquery jsonp

我在一台服务器上有我的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

和一条说失败的消息!。

我做错了什么以及如何解决这个问题?

由于

2 个答案:

答案 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).')';

因为我看到你提供了一个回调参数,一切都应该没问题