你能给我一个跨领域的例子吗?

时间:2013-01-15 10:32:47

标签: php javascript jquery ajax jsonp

  

可能重复:
  Ways to circumvent the same-origin policy

例如,我有一个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

2 个答案:

答案 0 :(得分: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"/>

答案 1 :(得分: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 ), ')';