【问题标题】:ajax calls from php page - checking for an empty array as result来自 php 页面的 ajax 调用 - 检查结果是否为空数组
【发布时间】:2012-09-11 03:58:39
【问题描述】:

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

【问题讨论】:

  • JSONdata不是字符串,length返回字符串的长度。
  • 我相信您不应该将 returnDataFromController 放入数组中。你真的不想要“var JSONdata=returnDataFromController;”吗? (没有 [])
  • 当你把它放在括号中时,你正在创建一个对象,而不是一个字符串。还要注意属性.length(jquery)和方法.length()(纯JS)的区别
  • @Daagon,那我该如何检查我的返回数据的长度呢?也就是说,我如何检查一个包含超过 0 个元素的数组?
  • 您正在创建一个长度为 1 的数组,因为该数组将包含整个 JSON 对象,而不是 JSON 对象中的项目数组

标签: php ajax arrays


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 2014-05-18
    • 1970-01-01
    • 2011-01-14
    相关资源
    最近更新 更多