2016-07-29 3 views
-1

Я пытаюсь перебрать объект, но jquery $ .each не будет срабатывать. Это результат переменной $ FileNames:Почему я не могу перебирать этот объект?

This is the outcome of the $fileNames variable

и это код, который я построил до сих пор:

$("input[type=button]").on("click", function(){ 
$searchtag = ''; 
$files = ''; 
$fileNames = {}; 

// first get all files in the directory 
$.ajax({ 
    url: "php/cse.php", 
    data: "requestFileNames=true", 
    method: "POST", 
    success: function(result){ 
    $result = JSON.parse(result).toString(); 
    $result += ","; 
    $count = ($result.match(/o/g)||[]).length + 1; 
    for (var i = 1; i <= $count; i++) { 
     $fname = $result.substr(0, $result.indexOf(',')); 
     $fileNames[$fname] = {}; 
     $result = $result.replace($fname + ",", ""); 
    } 
    } 
}); 

console.log($fileNames); 
$.each($fileNames, function(key, value){ 
    // this does not fire, for some reason. 
}); 

});

Почему это не работает?

+4

* Подсказка:. ** Асинхронный ** * –

+0

$ .ajax асинхронный –

+0

Итак, почему же я утешаю зарегистрировать его, но не повторить это? Не имеет смысла. Я понимаю, что такое асинхронное средство, но этого не должно быть. –

ответ

-2

Сделайте асинхронным ложь, но это остановит код.

$.ajax({ 
     url: "php/cse.php", 
     data: "requestFileNames=true", 
     method: "POST", 
     **async: false,** 
     success: function(result){ 
     $result = JSON.parse(result).toString(); 
     $result += ","; 
     $count = ($result.match(/o/g)||[]).length + 1; 
     for (var i = 1; i <= $count; i++) { 
      $fname = $result.substr(0, $result.indexOf(',')); 
      $fileNames[$fname] = {}; 
      $result = $result.replace($fname + ",", ""); 
     } 
     } 
    }); 

Или вызовите функцию (т.е. $ .each()) в рамках успеха или полного метода

+0

Очень, очень редко предлагается использовать 'async: false'. –

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