【问题标题】:AJAX & Firefox?AJAX 和火狐?
【发布时间】:2011-01-04 08:44:13
【问题描述】:

我正在尝试通过 ajax 填充 html 中的 div。 数据来源是谷歌搜索“bing很烂”

我用

调用方法
loadXMLDoc('http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Bing%20sucks')

它适用于 InternetExplorer,但不适用于 Firefox/Chrome。 如果我只从本地域 (test.txt) 加载一个文件,那么它可以工作。

我做错了什么?

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>
    <head>
    <title>AJAX</title>
<script language="javascript">



function loadXMLDoc(url)
{
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("GET",url,false);
    xmlhttp.send(null);
    document.getElementById('test').innerHTML=xmlhttp.responseText;
}


</script>
</head>

<body>

    <div id="lol">
        lol
    </div>

<div id="test">
<h2>Click to let AJAX change this text</h2>
</div>


<button type="button" onclick="loadXMLDoc('http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Bing%20sucks')">Click Me</button>
<button type="button" onclick="loadXMLDoc('test.txt')">Click Me</button></body>
</html>

【问题讨论】:

    标签: asp.net html ajax asp.net-ajax


    【解决方案1】:

    您不能使用 AJAX 从另一个域读取数据。

    您需要在您的域上编写一个服务器端脚本,该脚本向 Google 发送请求并将结果转发给您。

    【讨论】:

    • 所以我必须从为我获取数据的服务器端站点 (php/aspx) 获取它?对我来说听起来很愚蠢......
    • @unknown 我的浏览器不应该将文件写入本地系统,也不应该从服务于我正在查看的源的域之外的域请求信息。但这是我的看法。服务器端几乎总是您需要从您自己的域之外的域获取信息的方式,特别是如果您希望使用不是为您的前端构建的 API。您也可以只使用您需要的来自 Google API 的脚本的包含。 code.google.com/apis/ajaxlibs
    • Jep,如果我只想查询 google,我可以使用 google 的代码,但我以 google 源为例,它不是我想要获取的地方。
    • 所以本质上,我必须通过我的服务器(特别是当请求的数据不在我的服务器上时)将每个请求路由到客户端,使用三倍而不是零倍的带宽。我印象深刻,我的意思是这是真正的安全性——而不是让它变得安全——只是禁用它。真是废话。
    • 附录:折衷方案:通过 输出 50 kb /request 流量
    【解决方案2】:

    这里是通常的“只使用 jQuery”帖子!

    为什么不使用 jQuery?它会为您消除所有浏览器的不一致问题:

    <script type="text/javascript" src="/jquery.js"></script>
    <script type="text/javascript">
    var url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Bing%20sucks';
    $.getJSON(url + "&jsoncallback=?", function(data){
       $('#test').html(data);
    });
    </script>
    

    您需要一些服务器端编程来拦截请求以解决跨域问题。通常你不能从一个域向另一个域发出 ajax 请求。

    请参阅.getJSON 上的 jQuery 文档。类似性质的Previous question

    【讨论】:

    • 因为 jquery 的大小为 50 kb。这是不可接受的。最大 2kb。
    • 另外,jQuery 在这里也帮不上忙。
    • 缩小为 19k。但是,是的,我没有意识到您将遇到的跨域问题。
    • jQuery 仍然可以提供帮助,他们的 JSONP 实现:docs.jquery.com/Release:jQuery_1.2/Ajax#Cross-Domain_getScript
    猜你喜欢
    • 2014-05-18
    • 1970-01-01
    • 2011-08-02
    • 2013-10-30
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多