Передача функции в качестве параметра для обратного вызова - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь передать функцию в качестве параметра функции requestDataFromServer, которая ссылается на переменную genericxmlhttp.

Я прочитал о функции связывания и использовании «ЭТОГО», но не смог заставить ее работать.

У меня есть общая функция XMLHTTP requestDataFromServer, которую я хочу передать ейURL-адрес asp и функция обратного вызова, запускаемая после запуска onreadystatechange.

function requestDataFromServer(aspLink, callbackFunction) {

    var genericxmlhttp = new XMLHttpRequest();  
        genericxmlhttp.onreadystatechange  = function () {
            if (this.readyState==4 && this.status==200) {
                callbackFunction();
        }
    }
    genericxmlhttp.open("GET",aspLink,true);
    genericxmlhttp.send(null);  
}

Я хочу обратиться к объекту genericxmlhttp в функции обратного вызова, прежде чем передать его, чтобы я мог что-то сделать сresponseText.

case "job":                             
    var aspLink = "/jobTree/asp/getJobTreeDetails.aspx?sqlCommand=Exec schd.get_job_details @job_id%3D" + this.getAttribute("id")                           

    requestDataFromServer(aspLink, function() {
    console.log(genericxmlhttp.responseText);
    document.getElementById("cntDisplay").innerHTML = genericxmlhttp.responseText

    });

Я получаю сообщение об ошибке: «genericxmlhttp не определен»

Есть ли способ сослаться на объект genericxmlhttp?

1 Ответ

1 голос
/ 07 июня 2019

Переменная является локальной для requestDataFromServer, поэтому вы не можете ссылаться на нее в функции обратного вызова.

Передать ее в качестве параметра при вызове обратного вызова.

function requestDataFromServer(aspLink, callbackFunction) {

  var genericxmlhttp = new XMLHttpRequest();
  genericxmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      callbackFunction(this);
    }
  }
  genericxmlhttp.open("GET", aspLink, true);
  genericxmlhttp.send(null);
}
...
case "job":
  var aspLink = "/jobTree/asp/getJobTreeDetails.aspx?sqlCommand=Exec schd.get_job_details @job_id%3D" + this.getAttribute("id")

  requestDataFromServer(aspLink, function(genericxmlhttp) {
    console.log(genericxmlhttp.responseText);
    document.getElementById("cntDisplay").innerHTML = genericxmlhttp.responseText

  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...