jquery getjson跨域问题

时间:2011-08-05 14:39:48

标签: jquery json

我试图从另一个页面获取一些HTML代码并将其插入另一个网站上的页面。 所以问题是让跨域$ .get()调用工作。 但大多数人建议使用json来解决问题。

这是我使用的php文件

<?php
$arr = array(array("test","this is a string"));
$arr['name'] = "response";
echo $_GET['callback'] . "('" . json_encode($arr) . "')";
?>

这是我使用的功能,它使用jquery

function getJson(site, callback){
    $.ajax({
         url:site,
         dataType: 'JSONP',
         success:function(json){
            callback(json);
         },
         error:function(){
            //handle error
         },
    });
}

这就是我访问它的方式

getJson("http://websitename.com/page.php?callback=?", function(data){
    alert(data);
});

警告显示此字符串

('{"0":["test","this is a string"],"name":"response"}')

我的问题是,如何访问数据变量,就像它是json

一样
data.test;
data["test"];

编辑:再次解决了我自己的问题

我用过

$.parseJSON(data)

3 个答案:

答案 0 :(得分:2)

你不能 - 除非它允许它明确。 在服务器端使用http标头:

Access-Control-Allow-Origin: *

https://developer.mozilla.org/en/HTTP_access_control

答案 1 :(得分:0)

你不能。

我不知道是谁告诉你使用json但他们错了。 Ajax(不是json,json是别的东西)不能跨域。如果域名不同,则无法从iFrame中读取HTML。

如果必须,您可以使用服务器端代理为您执行此操作,但请记住请求将位于服务器的上下文中,而不是客户端。

编辑:

我刚刚意识到你在做jsonp! (我以为你试图获得HTML。)

您需要做的就是添加:

dataType: 'jsonp'

到请求,它应该工作。

答案 2 :(得分:0)

您正在尝试使用无效的JSONP 。当您检索特殊格式的JSON数据时,JSONP会起作用。您试图获取的数据是HTML,而不是JSON,正如Ariel指出的那样,并且格式不正确。如果您可以控制远程服务器,Jacek的建议是正确的;否则,是的,你需要服务器端代理(在本地服务器上),如Ariel所说。

编辑:如果您要更改问题,我可以更改答案。

我唯一能看到你做错的是在URL中指定callback - jQuery会为你处理这个问题 - 你是以大写形式编写JSONP。我无法相信其中任何一个实际上都是问题。如果Firebug net选项卡没有显示正在进行的请求,请逐步执行jQuery代码(它并不复杂)并查看原因。