help! XMLHttpRequest.onload 似乎不会触发, XMLHttpRequest.statu=0,无法从本地服务器 got 到想要的数据,该怎么解决?谢谢!

2017-08-13 12:38:54 +08:00
 Newyorkcity

初学者,跟着《 Head First HTML5 》在学,书上说本地托管也可以,然后我就用了本地托管(应该就是本地服务器吧?远程托管就是阿里云腾讯云之类的吧?)。本地服务器的建立是根据这个做出来的...
然后代码是根据书上写的,如下

function updataSales(responseText){
    var salesDiv = document.getElementById("sales");
    salesDiv.innerHTML = responseText;
}
window.onload = function(){    
    var url = "http://localhost/chapter6/sales.json";
    var request = new XMLHttpRequest();
    request.open("GET",url);
    alert("!!!!!");
    request.onload = function(){        
        if (request.status == 200){
            updataSales(request.responseText);
        }        
    }
    request.send(null);
}

但是由于网页中 id="sales"元素的内容并未改变,在试探哪里错的过程中发现
request.onload 这个状态可能没有触发(?),用一个 alert("!!!!!");,放在 request.onload 的外面都是能弹出来的,但是放到里面就不会触发。
然后是第二个问题,request.status = 0。。。
url 肯定没有输错。
请问各位能否在不换用远程托管的前提下解决这些问题呢?这些问题又是因为什么发生的啊?
另外还想请教几个自己在学的过程中感到不解的事儿
①.onload 这个在 window.onload 里指的是网页的 DOM 建立完成吗?那放在 request.onload 里,又是以什么事情做完为触发的呢——请求发送过去并且服务器返回了数据吗?
②XMLHttpRequest 的 open 方法,书上这么说『 open 方法听上去好像不仅会在请求对象中设置这些值,还会打开连接并获取数据。但实际上并非如此,open 只是用一个 url 建立一个请求,并告诉这个请求对象要使用哪种请求,以便 XMLHttpRequest 验证连接。
书上这段话『在请求对象中设置这些值』我听懂了,就是给这个对象的一些属性赋值吧?『打开连接并获取数据』就是指向服务器要求 URL 定位的文件的数据吧?但之后的斜体字我就理解不了,它的意思是,open 这个方法仅仅只告知了服务器说我可能会通过什么方式想你要哪里的文件,但是我没有索要,你也不必发送吗??
谢谢愿意解答的人~!
4021 次点击
所在节点    问与答
7 条回复
jugelizi
2017-08-13 12:44:46 +08:00
先装各 apache 或 nignx
然后用 jquery
Newyorkcity
2017-08-13 13:12:32 +08:00
@jugelizi 前面两个可以网上搜搜教程自己安装本地服务器,jquery 的话我现在 js 都没学好还只是初学者,不可能切过去学 jauery 啊。另外请问你觉得是什么问题呢?
oott123
2017-08-13 15:20:36 +08:00
你的代码没有问题。我猜测是 xhr 请求出错,请学习如何使用 Chrome Dev Tools。
onload 没有触发的话,onerror 或者 onreadystatechange 应该触发了。
以及看书不要太抠字眼,如果你理解不了就跳过。个人觉得这句话挺晦涩的,拿不准要表达什么意思。
oott123
2017-08-13 15:21:05 +08:00
以及,补充一句,这和本地还是远程服务器无关。
Newyorkcity
2017-08-13 16:24:21 +08:00
@oott123 谢谢 chrome consolo 做出如下错误提示
XMLHttpRequest cannot load
http://gumball.wickedlysmart.com/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
我自己也去搜索了一下,已有的问题都比我复杂些,然后我还是看到了跨域问题。然而我觉得这不可能是跨域问题啊,文件在本地,我的网页在本地,本地访问本地,这都能跨域吗。。。
可以麻烦你再看看可能是什么原因该怎么解决吗,谢谢。
zhoufenfens
2017-08-13 16:30:38 +08:00
requet.open 放在 request.onload 后面试试
oott123
2017-08-13 16:34:49 +08:00
@Newyorkcity #5 很明显,你访问了一个不在本地的 url: http://gumball.wickedlysmart.com/

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

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

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

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

© 2021 V2EX