我有一个jquery脚本如下:
$.ajax({
type: "GET",
url: "http://www.site.com/v4/ajax/get_song_info.php",
data: ({id : song_id }),
dataType: "json",
success: function(data)
{
alert( "Data: " + data );
}
});
以及相关的php页面:
<?php
include_once '../connect.php';
$song_id = $_GET['id'];
$query = mysql_query("SELECT * FROM songs WHERE id = '$song_id' LIMIT 1");
$song = mysql_fetch_row($query);
$song_info = array( htmlentities($song[3]) , htmlentities($song[4]) );
header('Content-Type: application/json');
echo json_encode($song_info);
?>
当我在浏览器中单独调用它时,php会返回类似的内容:["Peaches","I Feel Cream (Proxy Remix)"]
然而,当我进行jQuery调用时,我的警报显示'Data:null'
答案 0 :(得分:1)
我注意到您使用了绝对URL而不是相对URL。如果您的网页不是来自http://www.site.com
,那么您就会遇到Same Origin Policy。 SOP是一种由浏览器实现的安全机制。
你有几个方法可以解决这个问题。如果您控制服务器并且不需要支持IE6或IE7,则可以实现Cross-Origin Resource Sharing。在大多数现代浏览器中,如果服务器启用了CORS,那么您的ajax调用才会开始工作(浏览器会在其中处理它)。 IE6和IE7对CORS没有任何支持,IE8要求客户端代码做一些特别的事情。
另一个选项是JSONP,它利用了这样一个事实:虽然你不能进行跨源的ajax调用(除非你有CORS),但页面从一个页面加载脚本是完全可以的。远程主机。因此,您加载脚本,其中包含数据,并将您回拨给您,让您知道它在那里。 JSONP的优势在于它现在适用于所有主流浏览器。 jQuery在其ajax
调用中内置了JSONP支持。