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:

基于在JavaScript中解析JSON的帖子?,我已经将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);

问题是来自控制器的数据是格式错误的JSON。

请注意我帖子中显示返回数据的部分:

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

2.5应该是双引号,而不是单引号。我不明白这是怎么发生的,但我会创建另一个帖子来处理这个问题。谢谢大家。

最新更新