0
我試圖運行這個,但它不起作用。 它旨在返回一個在函數內部分配的變量,該變量作爲回調函數傳遞給sendRequest(),該函數通過異步方式通過XMLHttpRequest從Internet檢索數據。JavaScript變量不能用XMLHttpRequest更改
誰能告訴我爲什麼這不起作用,總是返回「」?
function sendRequest(requestCode, args, callback){
\t var req = requestEngineUrl + "?req=" + requestCode + ";" + args;
\t var xmlHttp = new XMLHttpRequest();
\t xmlHttp.onreadystatechange = function(){
\t \t if(xmlHttp.readyState == 4)
\t \t { \t
\t \t \t if(callback != null){
\t \t \t \t callback(xmlHttp.responseText);
\t \t \t }
\t \t }
\t };
\t xmlHttp.open("GET", req, true);
\t xmlHttp.send(null);
}
this.assembleProcess = function(){
\t \t if(!isNull(this.id) && !isNull(this.titles)){
\t \t \t var titles = this.titles;
\t \t \t var id = this.id;
\t \t \t c = "";
\t \t \t sendRequest('304', id,
\t \t \t \t function(result){
\t \t \t \t \t var res = result.split("/");
\t \t \t \t \t var title = res[0];
\t \t \t \t \t var possibilities = res[1];
\t \t \t \t \t var fcontent = title + '<br><div>';
\t \t \t \t \t \t if(titles.length != possibilities){
\t \t \t \t \t \t \t console.log("WARNING: [SURVEYCARD].titles has not the same length as possibilities");
\t \t \t \t \t \t }
\t \t \t \t \t
\t \t \t \t \t \t for(i = 0; i < possibilities; i++){
\t \t \t \t \t \t \t fcontent += '<div><a onclick="sendRequest("301",' + id + ',' + i + ',null)">' + titles[i] + '</a></div>';
\t \t \t \t \t \t }
\t \t \t \t \t
\t \t \t \t \t fcontent += '</div>';
\t \t \t \t \t c = fcontent;
\t \t \t \t });
\t \t \t return c;
\t \t }
過程是** **同步。發送給'sendRequest()'函數的回調函數將在HTTP請求完成時被調用。 'alert(c)'語句在那段時間之前已經達到* long *。 – Pointy
有沒有辦法做到這一點? – aprofomo
是的 - 你已經傳遞了一個回調函數。當回調運行時,內容將可用,並且您可以執行您需要的任何工作。這就是在異步環境中使用回調進行編程的本質。 – Pointy