【问题标题】:jquery getjson cross domain issuejquery getjson跨域问题
【发布时间】:2011-08-05 23:24:29
【问题描述】:

我正在尝试从另一个页面获取一些 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);
});

alert 显示这个字符串

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

我的问题是,我怎样才能像访问 json 一样访问 data 变量

data.test;
data["test"];

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

我用过

$.parseJSON(data)

【问题讨论】:

    标签: jquery json


    【解决方案1】:

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

    Access-Control-Allow-Origin: *
    

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

    【讨论】:

      【解决方案2】:

      你不能。

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

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

      编辑:

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

      你需要做的就是添加:

      dataType: 'jsonp'
      

      请求,它应该可以工作。

      【讨论】:

      • Ajax 实际上可以cross domains
      • @malvolio 因为并非所有浏览器都支持它,所以对我来说不算数。
      • Javascript 并非所有浏览器都支持。在某些时候,您必须放弃不良浏览器的过时版本。
      • @malvolio 是的,但是 IE7?你仍然需要支持它,而且它在 IE8 中甚至不能很好地工作。它在 Opera 中不起作用,在 3.5 之前的 Firefox 中也不起作用。所以现在还为时过早。
      • @malvolio 你能反转downmod(如果是你的话)吗?因为我觉得我的回答很好。
      【解决方案3】:

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

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

      我能看到你做错的唯一一件事是 在 URL 中指定了callback——jQuery 会为你处理这个问题——并且你正在编写 JSONP大写。我不敢相信这两个实际上是问题所在。如果 Firebug net 选项卡没有显示正在发出的请求,请单步执行 jQuery 代码(它并不复杂),看看为什么不显示。

      【讨论】:

      • 我现在实际上不确定他是否正在尝试获取 HTML。我认为他可能正试图让 jsonp 工作。
      • 我在其中一个变量中获取带有 html 的 json 数据。它应该仍然可以工作并以纯文本形式返回。
      • 我已经解决了在我的问题中指定的跨域获取 json 数据的原始问题。剩下的问题是将其从纯文本字符串格式化为 json 格式,以便使用括号或名称访问它。
      • 发布您的解决方案并提出新问题。
      • 我已经发布了该问题的解决方案,并在我当前的问题中进行了编辑
      猜你喜欢
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 2011-11-06
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多