我有一个'偶然'的问题:
使用 Ajax 发送请求时... 打开必须先行发送,当然......但是 onreadystatechange 分配?
在打开之前 - 在发送 -ing之后,在中
之前进行逻辑设置?让我们回想起来:
// Using POST
XMLHttp.open('POST', url, true);
XMLHttp.onreadystatechange = RequestState;
XMLHttp.send(parameter);
答案 0 :(得分:9)
一般来说,如果你关心的唯一readyState是4,那么如果在open()和send()之间调用open()之前分配了onreadystatechange事件处理程序,它就没有什么区别,或者在调用send()之后。以下是readyState的可能值:
- 0 - 未初始化。尚未调用open()方法。
- 1 - 打开。已调用open()方法但尚未调用send()。
- 2 - 已发送。已调用send()方法但未收到响应。
- 3 - 接收。已检索到一些响应数据。
- 4 - 完成。所有响应数据都已检索并可用。
通过在调用open方法之前定义onreadystatechange,它能够检测从0到4的每个状态变化。如果在open方法之后定义,则只检测状态1到4。因此,通常最好在open()之前放置onreadystatechange赋值。
需要注意的一点是,当在Internet Explorer 7中引入onreadystatechange时,您必须设置事件处理程序after calling open,否则会导致错误。但是在IE的更高版本中已经修复了这个问题。