簡體   English   中英

XMLHttpRequest()JavaScript

[英]XMLHttpRequest() javascript

為了恢復我的問題,我使用了許多XMLHttpRequest()火箭,以期獲取由TableRow()函數返回的值(miniTable)。 問題是,在TableRow()函數末尾的alert()上,我正好具有所需的值,但是在TableContent2變量上,我具有“未定義”的值。 我不知道為什么! 這里是我正在使用的所有JS文件(不在乎變量和計算變量的代碼)。 我真的需要您的幫助,因為自3天以來我一直被封鎖。 再次感謝您,下午好。

(function() {
 xmlhttp = new XMLHttpRequest(); 
 xmlhttp.onreadystatechange = function() { 
 if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
    myFunction(xmlhttp); 
 }
};
xmlhttp.open("GET", "File1.xml", true); 
xmlhttp.send(); 
})();
function  ContentFunction(func) {
TableContent2 = TableRow(); 
alert(TableContent2);  
 }
function TableRow() {
xmlhttp3 = new XMLHttpRequest(); 
xmlhttp3.onreadystatechange = function() { 
    if (xmlhttp3.readyState == 4 && xmlhttp3.status == 200) { 
    texttest = myFunction2(xmlhttp3); 

    alert(miniTable); 
    return miniTable; 
    }
};
xmlhttp3.open("GET", "File2.xml", true); 
xmlhttp3.send(); 
}
function myFunction2(xml) {
var xmlDoc2 = xml.responseXML; 
var ObjectText; 
var x = xmlDoc2.getElementsByTagName("Clip"); 
/*Calcule de ObjectText*/
  alert(ObjectText); 
return ObjectText;       
}
function myFunction(xml) {
xmlhttp2 = new XMLHttpRequest(); 
var xmlDoc = xml.responseXML; 
var x = xmlDoc.getElementsByTagName("Film"); 
xmlhttp2.onreadystatechange = function() { 
    if (xmlhttp2.readyState == 4 && xmlhttp2.status == 200) { 
        myFunction2(xmlhttp2);
    }
};
xmlhttp2.open("GET", "File2.xml", true); 
xmlhttp2.send();  
}   

TableRow返回任何內容。 xmlhttp3.onreadystatechange處的return語句不在較早的范圍內。 除此之外,您的xmlhttp3被設置為異步的,那么您將無法直接返回AJAX的任何信息。 可以立即讀取已棄用的同步請求(這就是為什么不應該使用它們),因為它們的作用就像一個無限循環,當請求完成時會中斷( for(;xhr.readyState!==4;); ,則手動執行此操作將永久暫停請求和腳本執行,這就是之前已進行同步請求的原因。)

同步請求不是一個好主意,它們會中斷與整個頁面的交互,因為它們會暫停頁面/腳本的執行。 例如,如果您有動畫,它將被暫停,包括事件偵聽器。

另外,看起來miniTable尚未在代碼的任何部分中聲明。

考慮使用回調函數,它們將存儲在TableRow范圍中,以后可以與其他參數一起調用。

這是一個基礎:

function  ContentFunction(func) {
    TableRow(function(TableContent2) {
        alert(TableContent2);
    });
}

function TableRow(doneFnc) {
    var xmlhttp3 = new XMLHttpRequest;
    xmlhttp3.onreadystatechange = function() {
        if (xmlhttp3.readyState === 4 && xmlhttp3.status === 200) { 
            var texttest = myFunction2(xmlhttp3); 

            /* success callback */
            doneFnc(texttest);
        }
    };
    xmlhttp3.open("GET", "File2.xml", true); 
    xmlhttp3.send(); 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM