2013-11-25 3 views
-1

Я пытался прочитать текстовый файл с помощью Javascript, и он работал, но функция ничего не возвращает.читать текстовый файл с помощью Javascript

<!DOCTYPE html> 
<html> 
<body> 
<head> 
<style> 
    html, body, #map-canvas { 
    height: 100%; 
    margin: 0px; 
    padding: 0px 
    } 
</style> 
<script> 
function loadFile(uri) { 
var r = new XMLHttpRequest(); 
r.open('GET', uri, true); 
r.onreadystatechange = function() { 
if (r.readyState == 4) { 
textlines=processFile(r.responseText); 
} 
} 

r.send(null); 
return textlines; 
} 

function processFile(fileContent) { 
var lines= fileContent.split('\n'); 
return lines; 
} 

var lines=loadFile('ss.txt'); 
alert(lines[0]); 
</script> 
</head> 


</body> 
</html> 

Выход - это диалоговое окно с сообщением: Undefined.

+0

дубликат [Как вернуть AJAX ответ текст?] (HTTP: // stackov erflow.com/questions/1225667/how-to-return-ajax-response-text) – Quentin

+0

Это не ответ, но вы знаете, что у вас есть голова внутри вашего тела, да? В HTML, то есть, я не подразумеваю, что у вас есть голова. –

+0

Попробуйте проверить строку 'if (r.readyState == 4) {'. Проверьте, действительно ли он находится в состоянии 4. – Dropout

ответ

0

Дело в том, что:

1) textlines нигде не определено, как var textlines;

2) textlines будут возвращены, когда статус OK, но когда вы сообщаете значение, кажется, что линии выполняется до того, как запрос xml завершит захват содержимого и возвращает его. Следовательно, вы должны предупредить это значение при проверке (==4) или выполнить функцию и передать textlines, чтобы она была доступна, только если она установлена ​​и готова к отображению. Код выглядит следующим образом [ПРОВЕРЕНО]

<script> 
var textlines; 

function processFile(fileContent) { 
var lines= fileContent.split('\n'); 
return lines; 
} 

function printValue(textlines){ 
    alert(textlines); 
} 

function loadFile(uri) { 
var r = new XMLHttpRequest(); 
r.open('GET', uri, true); 
r.onreadystatechange = function() { 
if (r.readyState == 4) { 
textlines = processFile(r.responseText); 
printValue(textlines); 
return textlines; 
} 
} 

r.send(null); 
return textlines; 
} 


var lines=loadFile('ss.txt'); 

</script> 

UPDATE:

Если вы хотите использовать переменную textlines без функции и прохождения, вы должны подождать некоторое время, пока запрос XML является полным, чтобы захватить содержимое, так что вы можете сделать:

<script> 
var textlines; 

function processFile(fileContent) { 
var lines= fileContent.split('\n'); 
return lines; 
} 

function loadFile(uri) { 
var r = new XMLHttpRequest(); 
r.open('GET', uri, true); 
r.onreadystatechange = function() { 
if (r.readyState == 4) { 
textlines = processFile(r.responseText); 
return textlines; 
} 
} 

r.send(null); 
return textlines; 
} 


var line=loadFile('ss.txt'); 
setTimeout(function(){ 
    alert(textlines); 
},100); 
</script> 
+0

Спасибо, кучка. Оно работало завораживающе. Большое спасибо :) –

+0

@ user3030465: Рад помочь :) – softvar

+0

Еще раз спасибо, но все еще что-то не так. Когда я пытаюсь напечатать значения из-за пределов функции loadfile, ничего не видно! i.e: –

Смежные вопросы