在AJAX请求中使用“this”与否的差异

时间:2017-12-15 02:13:31

标签: javascript ajax

下面有2个AJAX请求:

function sFunction(str) {
  xmlhttp = new XMLHttpRequest();
  xmlhttp.open("GET", "some.php?q=" + str, true);
  xmlhttp.send();
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
      document.getElementById("ajax").innerHTML = this.responseText;
    }
  }
}

function sFunction(str) {
  xmlhttp = new XMLHttpRequest();
  xmlhttp.open("GET", "some.php?q=" + str, true);
  xmlhttp.send();
  xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("ajax").innerHTML = this.responseText;
    }
  }
}

两者都有效,唯一的区别是使用this是否引用xmlhttp。在这种特殊情况下,我的问题是:

  1. 哪一个更合适?
  2. 在这个ajax函数中,是否存在一个优于另一个的优势?
  3. 需要一些专业意见。谢谢。

1 个答案:

答案 0 :(得分:3)

在这种情况下,两者都不是真正有利的,因为它们都指向同一个对象。

使用this的一个可能的优点是你可以在多个AJAX对象上重用该函数,就像这样。

function rsc() {
  if (this.readyState == 4 && this.status == 200) {
    document.getElementById("ajax").innerHTML = this.responseText;
  }
}

xmlhttp1 = new XMLHttpRequest();
xmlhttp1.open("GET", "some.php?q="+str, true);
xmlhttp1.send();
xmlhttp1.onreadystatechange = rsc;

xmlhttp2 = new XMLHttpRequest();
xmlhttp2.open("GET", "some.php?q="+str, true);
xmlhttp2.send();
xmlhttp2.onreadystatechange = rsc;

你可以节省一些记忆并以这种方式工作,但在大多数情况下它会非常小。