Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery getjson跨域问题_Jquery_Json - Fatal编程技术网

jquery getjson跨域问题

jquery getjson跨域问题,jquery,json,Jquery,Json,我正在尝试从另一个页面获取一些html代码,并将其插入到另一个网站的页面中。 因此,问题是如何让跨域$.get()调用正常工作。 但是大多数人建议使用json来解决这个问题 这是我使用的php文件 <?php $arr = array(array("test","this is a string")); $arr['name'] = "response"; echo $_GET['callback'] . "('" . json_encode($arr) . "')"; ?> 这就

我正在尝试从另一个页面获取一些html代码,并将其插入到另一个网站的页面中。 因此,问题是如何让跨域$.get()调用正常工作。 但是大多数人建议使用json来解决这个问题

这是我使用的php文件

<?php
$arr = array(array("test","this is a string"));
$arr['name'] = "response";
echo $_GET['callback'] . "('" . json_encode($arr) . "')";
?>
这就是我访问它的方式

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)

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

Access-Control-Allow-Origin: *
你不能

我不知道是谁让你使用json的,但他们错了。Ajax(不是json,json是其他东西)不能跨域。如果域不同,则不能从iFrame读取HTML

如果必须,您可以使用服务器端代理来完成此操作,但请记住,请求将在服务器上下文中进行,而不是在客户端

编辑:

我刚意识到你在做jsonp!(我以为你是在尝试获取html。)

您只需添加:

dataType: 'jsonp'

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

编辑:如果你要更改问题,我要更改答案


我能看到的唯一一件事是,您在URL中指定了
回调
——jQuery将为您解决这个问题——并且您正在用大写字母编写JSONP。我不相信这两个都是问题所在。如果Firebug net选项卡没有显示正在发出的请求,请逐步浏览jQuery代码(它没有那么复杂),然后看看原因。

Ajax实际上可以。@malvolio因为它不是所有浏览器都支持的,对我来说,它不算。Javascript不是所有浏览器都支持的。在某种程度上,你不得不放弃过时的坏浏览器版本。@malvolio yah,但是IE7呢?你仍然需要支持这一点,而且它在IE8中甚至不能很好地工作。它在Opera中不起作用,在3.5之前的Firefox中也不起作用。所以现在太早了。@malvolio,你能把downmod倒过来吗(如果是你的话)?因为我觉得我的答案很好。我现在不确定他是否在尝试获取HTML。我想他可能是想让jsonp正常工作,我正在其中一个变量中获取带有html的json数据。它应该仍然可以工作并以纯文本的形式返回。我已经解决了问题中指定的跨域获取json数据的原始问题。剩下的问题是将其从纯文本字符串格式化为json格式,即使用括号或名称访问。发布您的解决方案并提交一个新问题。我已经发布了该问题的解决方案,并在当前问题中进行了编辑
dataType: 'jsonp'