使用jQuery和JSON的跨域请求在Internet Explorer中不起作用(安全问题?)

时间:2012-04-06 03:10:53

标签: jquery cross-domain

我想使用Ajax发出请求,但当我意识到域名不同时,我决定改用JSON。

代码:

主要PHP文件(脚本代码)

$(".name").click(function(){
    //Get information
    var id = $(this).attr("id").substring(1);

    jQuery.getJSON("https:/otherdomain.com/makereq.php?id="+id+"&callback=?",
    function(data) {
         alert("id: " + data.id);
         return false;
    });
});

Makereq PHP文件

$jsonData = array('id'=>$_GET['id']);
echo $_GET['callback'] . '(' . json_encode($jsonData) . ');';

在Firefox中运行良好。我获取数据,警报显示发送和接收的ID。但在Internet Explorer中,出现安全错误,表示内容已被阻止且未收到数据。在Chrome中,它既不起作用。

为什么会发生这种情况或者我做错了什么?有没有解决方案来发送和接收数据而没有来自其他域的浏览器错误/警报?

2 个答案:

答案 0 :(得分:0)

我认为这不可能这样做。尝试在您的域上使用桥接PHP文件,该文件使用cURL读取其他主机内容。这肯定会奏效。

答案 1 :(得分:0)

查看getJSON上的jQuery page。当您尝试在跨域请求上使用回调数据时, JSONP 部分就是您所追求的。

getJSON()无效。你想要做的是使用回调的名称编写一个函数,并实际将php文件返回的数据作为javascript文件加载。

<script src="https:/otherdomain.com/makereq.php?id=1&callback=callBack"></script>

<script>
    callBack(data) {
       [do stuff...]
    }
</script>