jquery json函数返回null

时间:2010-06-14 06:42:28

标签: php jquery json

我有一个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'

1 个答案:

答案 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支持。