3

我有一个“附带”的小问题:

当使用Ajax发送请求时…… open必须先于send,当然……但是onreadystatechange分配呢?

在打开请求对象之前、发送之后或两者之间进行逻辑设置?

让他们回来'n'ya介意:

// Using POST
XMLHttp.open('POST', url, true);

XMLHttp.onreadystatechange = RequestState;

XMLHttp.send(parameter);
4

1 回答 1

11

一般来说,如果您关心的唯一 readyState 是 4,那么如果 onreadystatechange 事件处理程序是在调用 open() 之前、在 open() 和 send() 之间或在调用之后分配的,那么它并没有真正的区别发送()。以下是 readyState 的可能值:

  • 0 - 未初始化。open() 方法尚未被调用。
  • 1 - 打开。已调用 open() 方法,但尚未调用 send()。
  • 2 - 已发送。已调用 send() 方法,但未收到任何响应。
  • 3 - 接收。已检索到一些响应数据。
  • 4 - 完成。所有响应数据均已检索并可用。

通过在调用 open 方法之前定义 onreadystatechange,它能够检测到从 0 到 4 的每一个状态变化。如果在 open 方法之后定义,那么只会检测到状态 1 到 4。出于这个原因,通常首选将 onreadystatechange 赋值放在 open() 之前。

需要注意的一点是,在 Internet Explorer 7 中引入 onreadystatechange 时,您必须在调用 open 之后设置事件处理程序,否则会导致错误。但这已在 IE 的更高版本中得到修复。

于 2013-06-09T04:37:01.020 回答