function processStateChange() {
if (req.readyState == 4) { // 完成
if (req.status == 200) { // 響應正常
//將響應的文本分割成Span元素
spanElements =
splitTextIntoSpan(req.responseText);
//使用這些Span元素更新頁面
replaceExistingWithNewHtml(spanElements);
} else {
alert("Problem with server response:/n "
+ req.statusText);
}
}
}
replaceExistingWithNewHtml()是為processStateChange()使用的“私人”方法。
function replaceExistingWithNewHtml
(newTextElements){
//迴圈newTextElements
for(var i=newTextElements.length-1;i>=0;--i){
//判斷是否以 if(newTextElements[i].
indexOf("-1){
//獲得span的名字- 設定在第一和第二個引號之間
//確認span元素是以下的格式
//NewContent
startNamePos=newTextElements[i].
indexOf('"')+1;
endNamePos=newTextElements[i].
indexOf('"',startNamePos);
name=newTextElements[i].
substring(startNamePos,endNamePos);
//獲得內容-在第一個>標記後的所有內容
startContentPos=newTextElements[i].
indexOf('>')+1;
content=newTextElements[i].
substring(startContentPos);
//現在更新現有的Document中的元素,
// 確保文檔存在該元素
if(document.getElementById(name)){
document.getElementById(name).
innerHTML = content;
}
}
}
splitTextIntoSpan() 是為processStateChange() 使用的“私人”方法。
function splitTextIntoSpan(textToSplit){
//分割文檔
returnElements=textToSplit.
split("")
//處理每個元素
for(var i=returnElements.length-1;i>=0;--i){
//刪除掉第一個span後面的元素
spanPos = returnElements[i].
indexOf("
//如果找到匹配的,獲得span前的內容
if(spanPos>0){
subString=returnElements[i].
substring(spanPos);
returnElements[i]=subString;
}
}
return returnElements;
}