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 

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

Но в сценарии, где я возвращаю пустой массив, также создается поле со списком. Вот что выгружает консоль.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? , Я изменил код в разделе «Успех» вызова 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);