在 AJAX 请求中使用或不'this'的差异



下面有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功能中具有优势?

需要一些专业意见。谢谢。

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

使用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;

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

最新更新