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

2012-10-09 23:38:16 +08:00
 zhiml0ve
想在页面输入豆瓣的链接,然后显示书名,到底是哪个地方有问题?
希望好心人解答一下,麻烦了。

<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>
3897 次点击
所在节点    JavaScript
11 条回复
raptium
2012-10-09 23:41:04 +08:00
没细看
不过跨站的 XHR 默认是不允许的,如果豆瓣服务器没有特别支持的话
raptium
2012-10-09 23:42:28 +08:00
另外楼主如果用 Chrome 调试,Console 里应该会提到 Same Origin Policy 之类的东西,就是说的这个问题
zhiml0ve
2012-10-09 23:50:07 +08:00
@raptium 就是在chrome调试的,现在发现getElementsByTagName少了s,加上了;在change = bookname;语句前面加了alert(change);却完全没有反应。就是跨站不行吗?
感谢回答..
zythum
2012-10-09 23:52:22 +08:00
xhr不能跨区,安全问题。如果要做的话可以做成chrome插件之类的可以。
tux
2012-10-10 01:59:43 +08:00
chrome默认不能跨域
用 iframe 吧~
chone
2012-10-10 03:25:20 +08:00
除了跨域的问题,handleRequest的逻辑也不对,数据应该是从xmlReg.responseXML取得。
document是当前页面的。
还有没有.getElementByTagName这个方法,应该是.getElementsByTagName。

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

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

我的建议是要么用豆瓣的api(不太清楚是否有jsonp的接口),要么可以在当前域名下做一个代理页面。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/49582

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX