0

我有一个 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);
4

1 回答 1

0

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

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

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

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

于 2012-09-19T18:36:07.487 回答