2011-01-23 57 views
0

我有關於followng代碼如何「搜索」,通過一個XMLHttpRequest的響應

<html> 
<head> 
<script type="text/javascript"> 
function loadXMLDoc() 
{ 
var xmlhttp; 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    return xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET","index.html",true); 
xmlhttp.send(); 


} 
</script> 
</head> 
<body> 

<div id="myDiv"><h2>Let AJAX change this text</h2></div> 
<button type="button" onclick="loadXMLDoc()">Change Content</button> 

</body> 
</html> 

現在我想通過xmlhttp.responseText搜索(一個問題,換句話說,調用函數loadXMLDoc()把)的關鍵詞,例如像 「testfile的」,如果它存在多個例如 「testfile_1」 和 「testfile_2」 ..... 「testfile_n」 然後「doSomething的」

這樣

<html> 
<head> 
<script type="text/javascript"> 
function loadXMLDoc() 
{ 
var xmlhttp; 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    return xmlhttp.responseText; 
    } 
    } 



} 
function searchADocument(wordToSearchFor){ 
xmlhttp.open("GET","index.html",true); 
xmlhttp.send(); 
int numberOfTimesWordOccurs=0; 
var thePageToSearchThrough [] = loadXMLDoc(); 
for (i=0; i<thePageToSearchThrough.length; i++){ 
if(thePageToSearchThrough[i]==wordToSearchFor) 
numberOfTimesWordOccurs++; 
} 
If (numberOfTimesWordOccurs > 1) 
document.write("<a href="http://selnc05.go.se:8080/component_test/build/testfile_1"> testfile_1</a>"<a href="http://selnc05.go.se:8080/component_test/build/testfile_2"> testfile_2</a><a href="http://selnc05.go.se:8080/component_test/build/testfile_n"> testfile_n</a> 

) 

Else 

window.location="http://selnc05.go.se:8080/component_test/build/testfile.html"; 

} 
</script> 
</head> 
<body> 

<div id="myDiv"><h2>Let AJAX change this text</h2></div> 
<button type="button" onclick="searchADocument("testfile")">Change Content</button> 

</body> 
</html> 

我不知道從哪裏開始,因爲我不知道xmlhttp.responseText是什麼類型,我可以將它存儲在數組中並使用for循環等進行掃描嗎? 在此先感謝。 =)

編輯 我是什麼林做錯了

<html> 
<head> 
<script type="text/javascript"> 
function loadXMLDoc() 
{ 
var xmlhttp; 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 

    return xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET","index.html",true); 
xmlhttp.send(); 
} 

function searchADocument(){ //wordToSearchFor 
var txt=loadXMLDoc(); 
if(txt.test('hello'))alert('responseText contains "hello"'); 
else{ 
    document.getElementById("myDiv").innerHTML ="helloaj"; 
} 

} 
</script> 
</head> 
<body> 

<div id="myDiv"><h2>Let AJAX change this text</h2></div> 
<button type="button" onclick="searchADocument()">Change Content</button> 

</body> 
</html> 

得到以下錯誤消息,如果(txt.test( '你好')) Jscript腳本錯誤: '未定義' 爲空或不對象


編輯3 即時猜測我只是愚蠢的地獄,但我仍然不能得到這個工作,我爲什麼不能保存xmlhttp.responseText到一個變量?

像這樣

<html> 
<head> 
<script type="text/javascript"> 
var xmlhttp; 
function loadXMLDoc(url,cfunc) 
{ 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=cfunc; 
xmlhttp.open("GET",url,true); 
xmlhttp.send(); 
} 
function myFunction() 
{ 
loadXMLDoc("ajax_info.txt",function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    var txt=xlmhttp.responseText;//This aint working, why, how can I store xlmhttp.responseText into a variable, that I can peform a search on? 
    document.getElementById("myDiv").innerHTML=txt;//This aint working, why????? 
    } 
    }); 
} 
</script> 
</head> 
<body> 

<div id="myDiv"><h2>Let AJAX change this text</h2></div> 
<button type="button" onclick="myFunction()">Change Content</button> 

</body> 
</html> 

我可以補充一點,以上實際工作,如果我替換以下

var txt=xlmhttp.responseText; 
document.getElementById("myDiv").innerHTML=txt; 

與此

document.getElementById("myDiv").innerHTML=xlmhttp.responseText; 

我沒有接到電話回到函數如下所述,我得到的是xmlhttp是未定義的,所以我問這個這是有效的(至少是我希望的一半)。

再次抱歉不理解,但必須有明顯的東西,我不明白這一點,這根本不可能存儲在一個變量或東西。

+0

1`if`和`else`是應該在小寫書面聲明(JavaScript的關鍵字是區分大小寫)2.你的括號不匹配3.你沒不會在字符串中跳出你的雙引號4.使用`document.write`通常不是一個好主意5.爲什麼不知道'xmlhttp.responseText`是什麼類型?你正在從你的服務器申請一個文件,所以我希望你知道它發送了什麼 – 2011-01-23 18:24:56

回答

0
var txt=loadXMLDoc(); 

loadXMLDoc不返回任何東西,所以txtundefined在此之後。當然undefined沒有test方法,這是一種方法String.prototype

而是將回調處理程序分配給您的XMLHttpRequest,然後在其中執行任何操作。

xmlhttp.onreadystatechange=function() { 
    if (xmlhttp.readyState == 4) 
     if (xmlhttp.status==200) { 
      // do something with xmlhttp.responseText 
     } else { 
      // do something appropriate with status 
     } 
} 

更新:雖然我認爲它通常不是preferrable有這幾樣複製麪食的例子,我可以告訴你哪裏你應該把這段代碼。相反,這樣做的:

function searchADocument() { //wordToSearchFor 
    var txt = loadXMLDoc(); 
    if (txt.test('hello')) 
     alert('responseText contains "hello"'); 
    else 
     document.getElementById("myDiv").innerHTML = "helloaj"; 
} 

,你測試的loadXMLDoc返回值(其中,如前所述,立即返回,完成請求,以便)之前,你應該把你的代碼的回調處理程序中,您分配設置onreadystatechange

xmlhttp.onreadystatechange=function() { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
     var txt=xmlhttp.responseText; /* manipulate the DOM here */ 
     if (txt.test('hello')) 
      alert('responseText contains "hello"'); 
     else 
      document.getElementById("myDiv").innerHTML = "helloaj"; 
    } 
} 
+0

我不確定你的意思,我現在已經按照你的建議編輯了,但它仍然不起作用,你可以看看www .tdsoft.se並親自查看出了什麼問題?它說JScript運行時錯誤:對象不支持這個屬性或方法,換句話說「var txt = xmlhttp.responseText;」不是一個字符串? 再次感謝=) – Anders 2011-01-23 19:16:03