2013-09-12 4 views
0

Я изучаю метод Ajax с помощью jQuery. У меня есть простой код. Это загрузка данных из csv-файла методом jQuery Ajax и перенос его в массив для дальнейшего использования. Но кажется, что массив потерян за пределами функции Ajax, даже если я делаю массив глобальным в первую очередь.Глобальная переменная внутри функции Ajax

<!DOCTYPE html> 
<html> 
<head> 
<script type="text/javascript" src="js/jquery/jquery-1.10.2.min.js"></script> 
<script type="text/javascript"> 
var db=[]; 
$(document).ready(function(){ 
    $.ajax({ 
     url: 'loaddata.php', 
     success: function(data){ 
      var arr = data.split('|');   
      for(var i=0; i<arr.length; i++){ 
       var miniArr = arr[i].split(','); 
       db.push(miniArr); 
      } 
      printTest(); //work here   
     } 
    }); 
    printTest(); //not working and collapse here 
}); 

function printTest(){ 
    document.getElementById('test').innerHTML += db; 
} 

</script> 
</head> 
<body> 
<div id="test" /> 
</body> 
</html> ` 

Мой файл PHP должна быть тонкой,

<?php 
$database = file('database'); 
foreach($database as $item){ 
    if ($item===end($database)) 
     echo $item; 
    else 
     echo $item.'|'; 
} 

?>

Спасибо заранее.

+3

Прежде всего - при отправке 'printTest' в' $ .ajax' есть синтаксическая ошибка. –

ответ

-1

Вы не можете позвонить в свой второй printTest() здесь.

И для записи попробуйте использовать JSON для получения ваших данных, это намного проще.

0

Ваш второй printTest(), где находятся параметры .ajax, так что там есть синтаксическая ошибка. Причина, по которой первый вызов работает, заключается в том, что он находится внутри обратного вызова success, и поскольку AJAX асинхронный, это вызывается, когда вызов завершен.

Если вы положили вызов printTest() после вызова AJAX, он будет вызываться сразу после запуска вызова AJAX, не дожидаясь его завершения, из-за асинхронного вызова.

+0

Спасибо. Я установил 2sec Timeout, и теперь он работает. – user2772441

+0

@ user2772441 - Не делай этого! Нет гарантии, что ваш звонок AJAX завершится в это время, так что, если это не так? Вы должны обработать его в своем обратном вызове 'success'. – tymeJV

+0

С помощью метода javascript httpRequest я могу проверить состояние httpRequest.status == 200. Есть ли какой-либо подобный метод, чтобы убедиться, что процесс завершен, прежде чем я продолжу работу с другой частью программы? – user2772441

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