PHP、jQuery Ajax 和 json 跨域返回
Posted
技术标签:
【中文标题】PHP、jQuery Ajax 和 json 跨域返回【英文标题】:PHP, jQuery Ajax and json return over a cross domain 【发布时间】:2012-04-05 01:53:12 【问题描述】:我在一台返回 json 结果的服务器上有我的 php 编码页面。 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
还有一条消息说失败了!。
我做错了什么,如果可以解决这个问题,我该如何解决?
谢谢
【问题讨论】:
【参考方案1】:我经常使用这个,但也许有更好的方法
<?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).')';
因为我看到你提供了一个回调参数,所以一切都应该没问题
【讨论】:
JSONP 实际上不是 JSON,它是被添加到脚本标签的 JavaScript 文件。您应该改用application/javascript
MIME。
@Rocket 谢谢你的建议 :)【参考方案2】:
JSONP 实际上并不是 JSON。这有点“黑客”。 JSONP 实际上是一个 JavaScript 文件,可以下载并运行。
在您的 PHP 页面中,您应该被传递一个 callback
参数。您需要在其中“包装”您的 JSON。它应该是这样的:
func(json: data)
所以,你的 PHP 应该是这样的:
echo $_GET['callback'] . '(' . json_encode($v) . ')';
【讨论】:
以上是关于PHP、jQuery Ajax 和 json 跨域返回的主要内容,如果未能解决你的问题,请参考以下文章