我有一个 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 属性不正确?我不知道。
如果它对您有帮助,当我从 ajax 调用中取回数据时(因此应该创建组合时),“console.log(returnDataFromController)”行会给出以下结果
[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 中数组的长度。我以为它只是.length。
谢谢。
编辑 2: 也许我应该更改控制器发送的结果?我应该返回 false 还是 NULL,而不是返回一个空数组?
if (isset($buildingforbranch))
{
echo json_encode($buildingforbranch);
}
else
{
echo json_encode(false);
}
编辑 3:
基于Parse JSON in 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);