ajax звонки со страницы php - проверка на наличие пустого массива в результате

У меня есть страница PHP, которая включает в себя следующий JavaScript:

<script>

$(document).ready(function(){
    $('#search').hide();
  });

$('#L1Locations').live('change',function(){

      var htmlstring;
      $selectedvalue = $('#L1Locations').val();

      $.ajax({
                url:"<?php echo site_url('switches/getbuildings/');?>" + "/" + $selectedvalue,
                type:'GET',
                dataType:'json',
                success: function(returnDataFromController) {
                    alert('success');
                        var htmlstring;
                        htmlstring="<select name='L2Locations' id='L2Locations'>";
                        htmlstring = htmlstring + "<option value='all'>All</option>";

                        console.log(returnDataFromController);


                         var JSONdata=[returnDataFromController];
                        alert('string length is' + JSONdata.length);
                        if(JSONdata.length > 0) 
                        {
                            for(var i=0;i<JSONdata.length;i++){
                            var obj = JSONdata[i];
                              for(var key in obj){
                                     var locationkey = key;
                                     var locationname = obj[key];
                                     htmlstring = htmlstring + "<option value='" + locationkey + "'>" + locationname + "</option>";
                                }
                             }

                            $('#l2locations').html(htmlstring);

                        }
                        else
                        {
                            alert('i think undefined');
                            $('#l2locations').html('');
                        }                           
               }

    });
 $('#search').show();
 });
</script>

то, что я пытаюсь сделать, это динамически показать поле со списком, если переменная "returnDataFromController" имеет какие-либо элементы.

Но я думаю, что у меня есть ошибка со строкой, которая проверяет JSONdata.length.
Независимо от того, возвращает ли вызов ajax заполненный массив или пустой, длина всегда показывает существо 1. Я думаю, что я запутался в том, что считается, когда вы запрашиваете длину. Или, может быть, мое свойство dataType неверно? Я не уверен.

В случае, если вам это помогает, строка "console.log(returnDataFromController)" дает следующие результаты, когда я получаю данные обратно из вызова ajax (и, следовательно, когда нужно создать комбо)

[16:28:09.904] ({'2.5':"Admin1", '2.10':"Admin2"}) @ http://myserver/myapp/index.php/mycontroller/getbranches:98

В этом случае поле со списком отображается с правильным содержанием.

Но в сценарии, где я возвращаю пустой массив, также создается поле со списком. Вот что выдает вызов console.log:

[16:26:23.422] [] @ http://myserver/myapp/index.php/mycontroller/getbranches:98

Можете ли вы сказать мне, где я иду не так?

РЕДАКТИРОВАТЬ:

Я понимаю, что я воспринимаю свои возвращаемые данные как объект - я думаю, что это то, что я хочу, потому что я возвращаю массив. Я думаю, мне нужно знать, как правильно проверить длину массива в JavaScript. Я думал, что это просто длина.

Благодарю.

РЕДАКТИРОВАТЬ 2: Может быть, я должен просто послушать результаты, которые посылает мой контроллер? Вместо того, чтобы возвращать пустой массив, я должен вернуть false или NULL?

        if (isset($buildingforbranch))
        {
                echo json_encode($buildingforbranch);  
        }
        else 
        {
            echo json_encode(false);
        }

РЕДАКТИРОВАТЬ 3:

На основании сообщения, найденного в Parse JSON в JavaScript? Я изменил код в разделе "success" вызова ajax так:

                success: function(returnDataFromController) {

                        var htmlstring;
                        htmlstring="<select name='L2Locations' id='L2Locations'>";
                        htmlstring = htmlstring + "<option value='all'>All</option>";

                        console.log(returnDataFromController);


                         var JSONdata=returnDataFromController,
                            obj = JSON && JSON.parse(JSONdata) || $.parseJSON(JSONdata);
                            alert(obj);
 }

Но я получаю сообщение об ошибке на

[18:34:52.826] SyntaxError: JSON.parse: unexpected character @ http://myserver/myapp/index.php/controller/getbranches:102

Строка 102:

obj = JSON && JSON.parse(JSONdata) || $.parseJSON(JSONdata);

1 ответ

Решение

Проблема была в том, что данные с контроллера искажены JSON.

Обратите внимание на часть моего поста, где я показываю возвращаемые данные:

  ({'2.5':"Admin1", '2.10':"Admin2"})

2.5 должен быть в двойных кавычках, а не в одинарных. Я не понимаю, как / почему это происходит, но я создам еще один пост, чтобы разобраться с этим вопросом. Спасибо всем.

Другие вопросы по тегам