简单的javascript / ajax调用 - 不返回状态

时间:2014-03-02 15:41:24

标签: javascript ajax

以下代码在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文件。也许,我应该问,我应该寻找什么来实现我想要的?

4 个答案:

答案 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命令启动它,因为由于安全原因谷歌浏览器默认不加载本地文件