0

可能重复:
规避同源策略的方法

例如,我有一个 2 域“ http://domain1.com/info.php ”,另一个是“ http://domain2.com/script.html

现在第一个域“ http://domain1.com/info.php ”正在像这样发布 json 编码数据

{
    "str_info": [
        {
            "str_name": "Mark",
            "str_age": "22"
        },
        {
            "str_name": "Aliza",
            "str_age": "52"
        }
    ]
}

第二个域“ http://domain2.com/script.html ”所做的是检索和操作第一个域给出的数据。

我不知道如何连接和检索来自第一个域“ http://domain1.com/info.php ”的数据到脚本的第二个域。如果可能的话,你能告诉我如何使用 jsonp、jquery、ajax

4

2 回答 2

0

使用回调函数发送数据,例如

callback({
  "str_info":[{"str_name":"Mark","str_age":"22"},{"str_name":"Aliza","str_age":"52"}]
});

然后在接收数据的域上使用函数

<script>
    function callback(i){
    //maniputlate i (json data) here
    }
</script>
<script type="text/javascript" src="http://domain1.com/info.php"/>
于 2013-01-15T10:35:23.300 回答
0

来自 jQuery.org

由于浏览器安全限制,大部分“Ajax”请求都受同源策略的约束;请求无法从不同的域、子域或协议成功检索数据。

脚本和 JSONP 请求不受同源策略限制。

如果跨域工作,您可以使用一种名为JSONP 的方法 ajax 请求添加一个参数?callback=callbackname,您的服务器会回答

callbackname
(
    {
        "str_info": [
            {
                "str_name": "Mark",
                "str_age": "22"
            },
            {
                "str_name": "Aliza",
                "str_age": "52"
            }
        ]
    }
);

然后该函数在您的客户端上执行。您可以使用jQuery非常简单地完成此操作

$.getJSON("http://domain1.com/info.php?callback=?", function(data) {
  alert("success");
});

在 PHP 中,你会像这样包装你的结果(简单示例)

echo $_GET['callback'], '(' , json_encode( $data ), ')';
于 2013-01-15T10:45:22.210 回答