XMLHttpRequest 实例的事件

readyStateChange 事件

readyState属性的值发生改变,就会触发 readyStateChange 事件。

我们可以通过onReadyStateChange属性,指定这个事件的监听函数,对不同状态进行不同处理。尤其是当状态变为4的时候,表示通信成功,这时回调函数就可以处理服务器传送回来的数据。

progress 事件

上传文件时,XMLHttpRequest 实例对象本身和实例的upload属性,都有一个progress事件,会不断返回上传的进度。

  1. var xhr = new XMLHttpRequest();
  2. function updateProgress (oEvent) {
  3. if (oEvent.lengthComputable) {
  4. var percentComplete = oEvent.loaded / oEvent.total;
  5. } else {
  6. console.log('无法计算进展');
  7. }
  8. }
  9. xhr.addEventListener('progress', updateProgress);
  10. xhr.open();

load 事件、error 事件、abort 事件

load 事件表示服务器传来的数据接收完毕,error 事件表示请求出错,abort 事件表示请求被中断(比如用户取消请求)。

  1. var xhr = new XMLHttpRequest();
  2. xhr.addEventListener('load', transferComplete);
  3. xhr.addEventListener('error', transferFailed);
  4. xhr.addEventListener('abort', transferCanceled);
  5. xhr.open();
  6. function transferComplete() {
  7. console.log('数据接收完毕');
  8. }
  9. function transferFailed() {
  10. console.log('数据接收出错');
  11. }
  12. function transferCanceled() {
  13. console.log('用户取消接收');
  14. }

loadend 事件

abortloaderror这三个事件,会伴随一个loadend事件,表示请求结束,但不知道其是否成功。

  1. xhr.addEventListener('loadend', loadEnd);
  2. function loadEnd(e) {
  3. console.log('请求结束,状态未知');
  4. }

timeout 事件

服务器超过指定时间还没有返回结果,就会触发 timeout 事件,具体的例子参见timeout属性一节。