Ajax > onreadystatechange - 打开/发送 > 命令完全任意?

Posted

技术标签:

【中文标题】Ajax > onreadystatechange - 打开/发送 > 命令完全任意?【英文标题】:Ajax > onreadystatechange - open/send > order totally arbitrary? 【发布时间】:2013-05-26 18:47:58 【问题描述】:

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

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

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

让他们回来'n'ya头脑:

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

XMLHttp.onreadystatechange = RequestState;

XMLHttp.send(parameter);

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

以上是关于Ajax > onreadystatechange - 打开/发送 > 命令完全任意?的主要内容,如果未能解决你的问题,请参考以下文章

Ajax+Servlet+jsp显示搜索效果

1ajaxaxiosjsonp总结

无法读取未定义的属性“childNodes”

Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求

AJAX-----01远古时期的ajax

ajax之---原生ajax