Как выполнить «поиск» по ответу XMLHttpRequest - PullRequest
0 голосов
/ 23 января 2011

У меня есть вопрос по поводу следующего кода

<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>

получить следующее сообщение об ошибке на if (txt.test ('hello')) Jscript error:«undefined» - это ноль или не объект


РЕДАКТИРОВАТЬ 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 не определен, поэтому я спрашиваю об этом, который работает (по крайней мере, в половине случаев, когда я этого хочу).

Снова извините за непонимание, но должно быть что-то очевидное, что я не понимаю этого, что просто невозможно сохранить это в переменной или чем-то еще.

1 Ответ

0 голосов
/ 23 января 2011
var txt=loadXMLDoc();

loadXMLDoc ничего не возвращает, поэтому txt равно undefined после этого. Конечно, 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
        }
}

Обновление: Хотя я думаю, что подобные примеры с копировальной пастой обычно нежелательны, я могу показать вам , где , вы должны поместить этот кусок кода. Вместо этого:

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";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...