zoukankan      html  css  js  c++  java
  • 关于ajax的一点疑问

    今天在调试程序的时候发现了一个奇怪的问题,我写了一个封装ajax的对象,名字就叫ajax:

     1 var ajax = {
     2     get : function(url, onOk) {
     3         var xmlHttpRequest = this.createXMLHttpRequest();
     4         xmlHttpRequest.open("GET", url, true);
     5         xmlHttpRequest.onreadystatechange = function() {
     6             if (this.readyState == 4) {
     7                 if (this.status == 200) {
     8                     onOk(responseText);
     9                 } else {
    10                     onOk("异步通信失败");
    11                 }
    12             }
    13         };
    14         xmlHttpRequest.send(null);
    15     },
    16     post : function(url, param, onOk) {
    17         var xmlHttpRequest = this.createXMLHttpRequest();
    18         xmlHttpRequest.open("POST", url, true);
    19         xmlHttpRequest.onreadystatechange = function() {
    20             if (this.readyState == 4) {
    21                 if (this.status == 200) {
    22                     onOk(responseText);
    23                 } else {
    24                     onOk("异步通信失败");
    25                 }
    26             }
    27         };
    28         xmlHttpRequest.send(param);
    29     },
    30     createXMLHttpRequest : function() {
    31         if (window.XMLHttpRequest) {
    32             return new XMLHttpRequest();
    33         } else if (window.ActiveXObject) {
    34             return new ActiveXObject("Microsoft.XMLHTTP");
    35         }
    36     }
    37 };

    但是始终无法调用到onOk这个函数,即使服务器端返回了正确的结果,始终调用不到onOk这个函数,后来发现。。。

     1 var ajax = {
     2     get : function(url, onOk) {
     3         var xmlHttpRequest = this.createXMLHttpRequest();
     4         xmlHttpRequest.open("GET", url, true);
     5         xmlHttpRequest.onreadystatechange = function() {
     6             if (this.readyState == 4) {
     7                 if (this.status == 200) {
     8                     onOk(this.responseText);
     9                 } else {
    10                     onOk("异步通信失败");
    11                 }
    12             }
    13         };
    14         xmlHttpRequest.send(null);
    15     },
    16     post : function(url, param, onOk) {
    17         var xmlHttpRequest = this.createXMLHttpRequest();
    18         xmlHttpRequest.open("POST", url, true);
    19         xmlHttpRequest.onreadystatechange = function() {
    20             if (this.readyState == 4) {
    21                 if (this.status == 200) {
    22                     onOk(this.responseText);
    23                 } else {
    24                     onOk("异步通信失败");
    25                 }
    26             }
    27         };
    28         xmlHttpRequest.send(param);
    29     },
    30     createXMLHttpRequest : function() {
    31         if (window.XMLHttpRequest) {
    32             return new XMLHttpRequest();
    33         } else if (window.ActiveXObject) {
    34             return new ActiveXObject("Microsoft.XMLHTTP");
    35         }
    36     }
    37 };

    加上this关键字就可以调用到了,我很纳闷,为什么不添加this关键字,为什么就调用不到onOk这个函数呢?

    原来在onOk所在函数和外部都没有这个responseText变量,只有指定了this,才能准确定位到XMLHTTPRequest对象中的属性

  • 相关阅读:
    spark
    mongdb
    redis
    mysql
    kylin
    kafka
    hadoop+hive+hbase+kylin
    git
    elasticsearch
    clickhouse
  • 原文地址:https://www.cnblogs.com/lmtoo/p/2828616.html
Copyright © 2011-2022 走看看