V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
zhiml0ve

js小白,搞不清楚XMLHttpRequest对象的异步过程。实在是不知道可以在哪里发问和向谁发问...请见谅..

  •  
  •   zhiml0ve · Oct 9, 2012 · 4470 views
    This topic created in 4947 days ago, the information mentioned may be changed or developed.
    想在页面输入豆瓣的链接,然后显示书名,到底是哪个地方有问题?
    希望好心人解答一下,麻烦了。

    <html>
    <head>
    <title>Get Book Name..</title>

    <script type="text/javascript">
    function getit(){
    var xmlReg = new XMLHttpRequest();
    var curl = document.getElementById("e_url").value;
    xmlReg.open("GET",curl,true);
    xmlReg.onreadystatechange = handleRequest;
    xmlReg.send(null);
    }
    function handleRequest(){
    if (xmlReg.readyState==4 && xmlReg.status==200) {
    var bookname = document.title;
    var change = document.getElementByTagName("h1")[0];
    change = bookname;
    };
    }
    </script>
    </head>

    <body>
    <input type="text" id="e_url" value="" />
    <input type="button" id="get_it" value="Get It.." onclick="getit();"/>
    </br>
    <h1></h1>
    </body>
    </html>
    11 replies    1970-01-01 08:00:00 +08:00
    raptium
        1
    raptium  
       Oct 9, 2012
    没细看
    不过跨站的 XHR 默认是不允许的,如果豆瓣服务器没有特别支持的话
    raptium
        2
    raptium  
       Oct 9, 2012   ❤️ 1
    另外楼主如果用 Chrome 调试,Console 里应该会提到 Same Origin Policy 之类的东西,就是说的这个问题
    zhiml0ve
        3
    zhiml0ve  
    OP
       Oct 9, 2012
    @raptium 就是在chrome调试的,现在发现getElementsByTagName少了s,加上了;在change = bookname;语句前面加了alert(change);却完全没有反应。就是跨站不行吗?
    感谢回答..
    zythum
        4
    zythum  
       Oct 9, 2012
    xhr不能跨区,安全问题。如果要做的话可以做成chrome插件之类的可以。
    tux
        5
    tux  
       Oct 10, 2012   ❤️ 1
    chrome默认不能跨域
    用 iframe 吧~
    chone
        6
    chone  
       Oct 10, 2012
    除了跨域的问题,handleRequest的逻辑也不对,数据应该是从xmlReg.responseXML取得。
    document是当前页面的。
    还有没有.getElementByTagName这个方法,应该是.getElementsByTagName。

    关于dom的操作lz可以看一下这个 http://www.w3school.com.cn/xmldom/dom_nodes_info.asp
    nicolazj
        7
    nicolazj  
       Oct 10, 2012
    v2ex 发帖不能格式化代码吗~
    ant_sz
        8
    ant_sz  
       Oct 10, 2012
    @tux iframe也不行哦。现在在js里加载跨域的page,是不能通过访问iframe的document访问到iframe的内容了

    @zhiml0ve 可以考虑豆瓣开放的API,豆瓣甚至有一个封装好的JS库可以直接调用。另外,实现跨域的js通讯交流有种方法叫做 JSONP ,可以 Google 一下试试
    liuyl
        9
    liuyl  
       Oct 10, 2012
    douban图书有api,调用api吧
    foru17
        10
    foru17  
       Oct 10, 2012
    我学Jquery ,到Ajax Jsonp那块,犯晕了.
    chone
        11
    chone  
       Oct 10, 2012
    @ant_sz
    @tux
    用iframe设置document.domain的方法解决的是跨子域访问的问题,不过可以通过iframe 的hash值来弄,但显然这种方法不适合lz的需要。

    我的建议是要么用豆瓣的api(不太清楚是否有jsonp的接口),要么可以在当前域名下做一个代理页面。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   6113 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 69ms · UTC 02:45 · PVG 10:45 · LAX 19:45 · JFK 22:45
    ♥ Do have faith in what you're doing.