2

我想使用 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 中,它也不起作用。

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

4

2 回答 2

0

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

getJSON()不会在这里工作。您要做的是使用回调的名称编写一个函数,并将您的 php 文件返回的数据实际加载为 javascript 文件。

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

<script>
    callBack(data) {
       [do stuff...]
    }
</script>
于 2012-09-18T21:11:01.580 回答
0

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

于 2012-04-11T11:46:56.127 回答