JavaScript 变量不随 XMLHttpRequest 改变

JavaScript variable not changing with XMLHttpRequest

我试过 运行 但是没用。 它旨在 return 函数内部分配的变量,作为回调传递给 sendRequest(),它通过 XMLHttpRequest 异步从 Internet 检索数据。

谁能告诉我为什么这不起作用并且总是 returning ""?

function sendRequest(requestCode, args, callback){
 var req = requestEngineUrl + "?req=" + requestCode + ";" + args;
 var xmlHttp = new XMLHttpRequest();
 xmlHttp.onreadystatechange = function(){
  if(xmlHttp.readyState == 4)
  { 
   if(callback != null){
    callback(xmlHttp.responseText);
   }
  }
 };
 xmlHttp.open("GET", req, true);
 xmlHttp.send(null);
}

this.assembleProcess = function(){
  if(!isNull(this.id) && !isNull(this.titles)){
   var titles = this.titles;
   var id = this.id;
   c = "";
   sendRequest('304', id, 
    function(result){
     var res = result.split("/");
     var title = res[0];
     var possibilities = res[1];
     var fcontent = title + '<br><div>';
      if(titles.length != possibilities){
       console.log("WARNING: [SURVEYCARD].titles has not the same length as possibilities");
      }
     
      for(i = 0; i < possibilities; i++){
       fcontent += '<div><a onclick="sendRequest("301",' + id + ',' + i + ',null)">' + titles[i] + '</a></div>';
      }
     
     fcontent += '</div>';
     c = fcontent;
    });
   return c;
  } 

由于 XMLHttpRequest 是异步的,因此您应该为此编写一个异步函数,如下所示

this.assembleProcess = function(callback){
        if(!isNull(this.id) && !isNull(this.titles)){
            var titles = this.titles;
            var id = this.id;
            c = "";
            sendRequest('304', id, 
                function(result){
                    var res = result.split("/");
                    var title = res[0];
                    var possibilities = res[1];
                    var fcontent = title + '<br><div>';
                        if(titles.length != possibilities){
                            console.log("WARNING: [SURVEYCARD].titles has not the same length as possibilities");
                        }

                        for(i = 0; i < possibilities; i++){
                            fcontent += '<div><a onclick="sendRequest("301",' + id + ',' + i + ',null)">' + titles[i] + '</a></div>';
                        }

                    fcontent += '</div>';
                    c = fcontent;
                    callback(c)
                });
        } 

然后,不要将 this.assembleProcess 用作带结果的函数,而应将函数作为参数传递:

而不是

console.log(this.assembleProcess);

这样做

this.assembleProcess(function(c){console.log(c)});