Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法读取未定义的属性“length”_Javascript_Jquery_Google Analytics Api_Google Api Php Client - Fatal编程技术网

Javascript 无法读取未定义的属性“length”

Javascript 无法读取未定义的属性“length”,javascript,jquery,google-analytics-api,google-api-php-client,Javascript,Jquery,Google Analytics Api,Google Api Php Client,我一直在创建一个工具,需要创建一系列下拉菜单,从google analytics中选择一个配置文件/视图id,在更改前一个菜单时填充下一个菜单,为正确的帐户选择正确的属性,然后为正确的属性选择正确的配置文件 为此,我制作了一个小型jquery/javascript for loop系统,我认为它实际上相当混乱,但不确定如何改进它,虽然这不是问题的一部分,但这可能是我遇到问题的原因之一,尽管我不确定 这个脚本适用于我测试过的所有浏览器,包括我非常满意的移动设备 然而,当该工具推出时,大约100人中

我一直在创建一个工具,需要创建一系列下拉菜单,从google analytics中选择一个配置文件/视图id,在更改前一个菜单时填充下一个菜单,为正确的帐户选择正确的属性,然后为正确的属性选择正确的配置文件

为此,我制作了一个小型jquery/javascript for loop系统,我认为它实际上相当混乱,但不确定如何改进它,虽然这不是问题的一部分,但这可能是我遇到问题的原因之一,尽管我不确定

这个脚本适用于我测试过的所有浏览器,包括我非常满意的移动设备

然而,当该工具推出时,大约100人中有两人回来说没有选择纵断面图/视图。这很奇怪,因为我无法复制这个错误

我曾经与其中一个人联系过,并尝试过调试,尽管这是一个漫长的会议等的缓慢过程,但找不到解决方案,尽管我认为我成功地隔离了问题,这将在代码示例后指出

所以我的问题是。是什么导致了这种长度的未定义错误,为什么在使用jquery 1.11.1版的jquery.min.js:2中,只有1-2个人出现这种情况?。更改属性时似乎会发生错误,这很奇怪,因为配置文件填写正确。我还问客户端是否可以使用不同的浏览器和帐户,但同样的错误不断发生

以下是创建下拉列表的代码:

    function fillDropdownMenus(){

        var accounts = <?php echo json_encode($accountsArray); ?>;

        var propertiesSelectHtml = '<div class="col-xs-12 col-md-4 properties"><select class="col-xs-12" id="properties"><option selected="selected">PROPERTY NAMES</option></select></div>';
        var profilesSelectHtml = '<div class="col-xs-12 col-md-4 profiles"><select class="col-xs-12" id="profiles"><option selected="selected">VIEW NAMES</option></select></div>';

        accounts.forEach(function(account){

            var accountIterator = 0;
            account.account['id'].forEach(function(accountId){
                $('#accounts').append('<option value="'+accountId+'">'+account.account['name'][accountIterator]+'</option>');
                accountIterator++;
            });

        });

        $('.accounts').on('change','#accounts', function(event){

            var currentAccount = $('#accounts').val();

            $('.properties').remove();

            $('.profiles').remove();

            $('.accounts').after(propertiesSelectHtml);

            accounts.forEach(function(account){
                $.each(account.account, function(accountkey, accountvalue){
                    if(accountvalue == currentAccount){
                        var propertyIterator = 0;

                        account.account['property']['id'].forEach(function(propertyId){
                            $('#properties').append('<option value="'+propertyId+'">'+account.account['property']['name'][propertyIterator]+'</option>');
                            propertyIterator++;
                        });
                    }
                });
            });

            $('.properties').on('change','#properties', function(ev){

                var currentProperty = $('#properties').val();

                $('.profiles').remove();

                $('.properties').after(profilesSelectHtml);

                accounts.forEach(function(account){
                    $.each(account.account['property'], function(propertykey, propertyvalues){
                        if($.type(propertyvalues) == 'object' || $.type(propertyvalues) == 'array'){
                            for(var k in propertyvalues){
                                var propertyvalue = propertyvalues[k];

                                if(propertyvalue == currentProperty){
                                    var profileIterator = 0;

                                    account.account['property']['profile']['id'].forEach(function(profileId){
                                        $('#profiles').append('<option value="'+profileId+'">'+account.account['property']['profile']['name'][profileIterator]+'</option>');
                                        profileIterator++;
                                    });
                                }
                            }
                        } else {
                            if(propertyvalue == currentProperty){
                                var profileIterator = 0;
                                account.account['property']['profile']['id'].forEach(function(profileId){
                                    $('#profiles').append('<option value="'+profileId+'">'+account.account['property']['profile']['name'][profileIterator]+'</option>');
                                    profileIterator++;
                                });
                            }
                        }
                    });
                });

                $('#profiles').on('change', function(e){

                    $('#view_id').removeAttr('value');

                    var currentProfile = $('#profiles').val();

                    $('#view_id').val(currentProfile);

                });

            });

        });

    }

    fillDropdownMenus();
谢谢你对我这个问题的意见,因为我这几天一直在努力解决这个问题


编辑:这是一个正在运行的列表代码笔。

这似乎是我的javascript中的一个错误,非常不一致,有这么多不同的for循环没有帮助。在我将它们全部更改为正常状态后,每个jquery循环似乎都解决了问题,并使整个菜单集工作得更好,因为还有一些逻辑错误。我没有按属性筛选配置文件,只是在选择属性时为该帐户显示所有配置文件。

var accounts=;您不应该执行var accounts=JSON.parse;
Object -> account (object) -> id (array)
                           -> name (array)
                           -> property (object) -> id (array)
                                                -> name (array)
                                                -> profile (object) -> id (array)
                                                                    -> name (array)