我试图从另一个页面获取一些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)
答案 0 :(得分:2)
你不能 - 除非它允许它明确。 在服务器端使用http标头:
Access-Control-Allow-Origin: *
答案 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代码(它并不复杂)并查看原因。