以下代码在html页面上什么也没有产生,它似乎在'status'上分解:
var get_json_file = new XMLHttpRequest();
get_json_file.open("GET", "/Users/files/Documents/time.json", true);
**document.write(get_json_file.status);**
请记住,我在Mac上,所以没有C:驱动器....但是,这行代码确实可以正常工作:
document.write(get_json_file.readyState);
我只是想知道我能够成功找到我的json文件。也许,我应该问,我应该寻找什么来实现我想要的?
答案 0 :(得分:2)
关于AJAX的另一个基本问题。我建议你阅读有关使用XMLHttpRequest的MDN article。在准备就绪之前,您无法访问'status'属性,甚至没有调用执行实际请求的'send()'方法。如果不首先发出HTTP请求,则无法获得状态。在尝试使用之前了解AJAX的工作原理。解释一切都太长了,这不是那个地方。
答案 1 :(得分:0)
您只能在ajax完成后获取状态。也就是说,当页面被加载时,或者返回了404。
因为您在发送请求(或未发送,请阅读P.S)之后尝试直接拨打status
,所以您什么都没得到。
您需要进行异步调用,仅在请求完成时检查该状态:
get_json_file.onreadystatechange = function (){
if (get_json_file.readyState==4 && get_json_file.status==200)
{
alert('success');
}
}
在http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.asp
了解详情 @Oscar注意到 P.S ,你错过了send()
。
如果你想尝试一种同步方法,它会阻止代码运行直到返回一个响应,你可以尝试:
var get_json_file = new XMLHttpRequest();
get_json_file.open("GET", "/Users/files/Documents/time.json", false);
//notice we set async to false (developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest)
get_json_file.send(); //will wait for a response
document.write(get_json_file.status);
//(Credit: orginial asker)
答案 2 :(得分:0)
由于安全问题,您不能向本地系统上的文件发送请求,但您可以查看fileReader API。 (更多信息here)
<sidenote>
The reason that the readyState works and not status is because by defualt
readyState has a value of 0 and status has no value so it would be undefined.
</sidenote>
答案 3 :(得分:0)
在我的ubuntu中,路径将以file:///
作为前缀我认为你的json文件路径应该有file:///Users/files/Documents/time.json,因为mac和ubuntu基于unix
然后你可以使用@TastySpaceApple回答检查ajax状态
如果您使用谷歌浏览器,请不要忘记使用--allow-file-access-from-files命令启动它,因为由于安全原因谷歌浏览器默认不加载本地文件