2015-08-08 2 views
0

Почему мой цикл возвращает 3 для длины массива, но функция обратного вызова searchKey(value).length возвращает 0?Получить длину массива в jQuery

 function searchKey(value) { 
     if (value.length > 0) { 
      var keys = getKeys(value);// return array string 
      var arr = []; 
      $.post('@Url.Content("~/Home/GetJsonData")', {}, function (result) { 

       $.each(eval(result.replace(/[\r\n]/, "")), function (index, item) { 
        if (item.Tag != null) { 
         for (var i = 0; i < keys.length; i++) { 

          if (item.Tag.toLowerCase().indexOf(keys[i]) > -1) { 

           arr.push({ 
            "Key": item.Key, 
            "Value": item.Tag, 
            "Tag": keys[i], 
            "Length": keys[i].length 

           }); 
           alert("arr:" + arr.length);// result: 3 
           break; 
          } 
         } 
        } 
       });     
      }, "json"); 
     } 
     alert("arr:" + arr.length);// result: 0 
     return arr; 
} 

    function getKeys($param) { 
     //some code to find 'keys' 
     return keys; 
    } 

ответ

0

jquery post/get request являются асинхронными. Ваша функция делает пост-запрос, завершена, возвращает пустой массив, а затем ответ от сервера возвращается клиенту. Вы можете синхронизировать его (https://stackoverflow.com/a/5821467/5206593), но это не очень хорошая идея, потому что ваша страница будет медленной.

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