Читатель текстового файла Javascript не работает с первого раза - PullRequest
0 голосов
/ 03 июня 2011

Я получил веб-страницу с какой-то самодельной поисковой системой, которая должна искать некоторые данные в текстовом файле на стороне сервера. Я использую JS для анализа этого файла, он работает хорошо, за исключением первого раза, когда я его использую ... Кажется, виновником является моя функция fetchText (), которая ничего не возвращает в первый раз. Обратите внимание, что если я добавлю alert () внутри fetchText (), он будет работать правильно (см. Примечание в исходном коде JS). Я думаю, что IFRAME не полностью загружен или что-то. Что я могу сделать?

Код веб-страницы

        <form style="margin-top:15px; margin-left:15px;width:200px;">
            <input type="text" value="NGR_" id="srcTxtInput" style="margin-top:0px;margin-left:0px;width:100px;"/>
            <input type="button" value="Go" onclick="SearchString('./Coordinates.txt')" />
        </form>


    <div id="searchResults" style="vertical-align:right;margin-top:25px;"> 
        <select size="4" id="select_list" onchange="Selec_change();" ondblclick="Selec_change();" style="visibility: hidden; width:250px;margin-left:8px;" ></select>                       
        <img id="closeImg" src="./close.png" height="15px" width="15px" style="opacity:0.5;visibility:hidden; margin-left:235px;margin-bottom:5px;margin-top:5px;vertical-align:top;" alt="Close results" title="Close results"  onclick="HideSearch();" onmouseover="this.style.cursor='pointer';"/>
    </div>

JS код

function SearchString(txtFile){
    var slist = document.getElementById('select_list');
    var str = trim(document.getElementById('srcTxtInput').value.toUpperCase()); 

    if(str == "" ){
      slist.options.length = 0; //empty list
      HideSearch();
      exit;
    }  

    var txt = fetchText(txtFile); 

//DO SOMETHING
}



function fetchText(txtFile) {

var d = document;
var txtFrame = d.getElementById('textReader');
txtFrame.src = txtFile;

 **//Note that if I add *alert(txtFrame.src)* here the function works the 1st time**

var text = '';
if (txtFrame.contentDocument) {
    var d = txtFrame.contentDocument;
    text = d.getElementsByTagName( 'BODY')[ 0].innerHTML;
}
else if (txtFrame.contentWindow) {
    var w = txtFrame.contentWindow;
    text = w.document.body.innerHTML;
}   

return text;
}

1 Ответ

0 голосов
/ 03 июня 2011

Поскольку такая загрузка страницы является асинхронной операцией, вы не можете ожидать, что содержимое будет там сразу после установки атрибута "src" вашего <iframe>.Вам нужно будет поместить код для поиска по тексту в обработчик событий «load» в документе фрейма.

Это означает, что вы напишите что-то вроде:

  fetchText(textFile, function(theText) {
    // DO SOMETHING
  });

измените «fetchText ()», чтобы это было больше похоже на:

function fetchText(txtFile, whenLoaded) {  
  var d = document;
  var txtFrame = d.getElementById('textReader');

  txtFrame.onload = function() {
    var text = '';
    if (txtFrame.contentDocument) {
      var d = txtFrame.contentDocument;
      text = d.getElementsByTagName( 'BODY')[ 0].innerHTML;
    }
    else if (txtFrame.contentWindow) {
      var w = txtFrame.contentWindow;
      text = w.document.body.innerHTML;
    }

    whenLoaded(text);
  };

  txtFrame.src = txtFile;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...