代码之家  ›  专栏  ›  技术社区  ›  Billy ONeal IS4

jqgrid抛出“未捕获语法错误,无法识别的表达式:”

  •  19
  • Billy ONeal IS4  · 技术社区  · 14 年前

    大家好:)我很抱歉列出了这么长的代码,但我不确定我到底把这里搞砸了。我正在编写一个内部使用的jquery插件来编辑访问控制列表。

    acl编辑器的一个组件是jqgrid插件,它是一个优秀的网格实现,它附带了自己的Ajax加载工具等。我以前使用过这个组件,但我从未尝试过将它用作插件的子组件。Ajax请求被正确发送(从我在Chrome的调试器中看到的),这让我相信这个bug不在我的代码中,但我不确定此时该怎么做。

    我对大量的代码感到抱歉,但这是我能想到的最简单的例子。

    /*global jQuery*/
    "use strict"; /* Enable ECMAScript 5 Strict Mode if supported */
    (function ($) {
        var methods, defaults;
    
        methods = {
            init: function (options) {
                var sid, pager, enumerateUrl;
                if (this.data('isAclEditor')) {
                    $.error('The targeted element is already an ACL Editor.');
                } else {
                    this.data('isAclEditor', true);
                }
                this.data('options', $.extend(true, {}, defaults, options));
                /*
                 <div class="ui-jqgrid ui-widget ui-widget-content">
                    <div class="ui-jqgrid-titlebar ui-widget-header ui-helper-clearfix">
                        <span class="ui-jqgrid-title">TITLE</span>
                    </div>
                    <table class="sidList"></table>
                    <div class="sidPager"></div>
                    <div class="privSlideout" style="display:none;">
                        <table cellspacing="0" cellpadding="0" border="0">
                            <thead>
                                <tr>
                                    <th class="ui-th-column ui-state-default" colspan="3" class="privLabel"></th>
                                </tr>
                                <tr>
                                    <th class="ui-th-column ui-state-default" style="width: 50px;">Allow</th>
                                    <th class="ui-th-column ui-state-default" style="width: 50px;">Deny</th>
                                    <th class="ui-th-column ui-state-default" style="width: 520px;">Privilege</th>
                                </tr>
                            </thead>
                            <tbody class="privTable">
                            </tbody>
                        </table>
                        <button class="btnOk">Ok</button>
                        <button class="btnCancel">Cancel</button>
                    </div>
                    <div style="display:none;" class="newPrivPicker">
                        <div style="font-size: 10pt">
                            <table class="newPrivTable"></table>
                            <div class="newPrivPager"></div>
                        </div>
                    </div>
                 </div>
                 */
                this.html('<div class="ui-jqgrid ui-widget ui-widget-content"><div class="ui-jqgrid-titlebar ui-widget-header ui-helper-clearfix"><span class="ui-jqgrid-title">' + this.data('options').title + '</span></div><table class="sidList"></table><div class="sidPager"></div><div class="privSlideout" style="display:none;"><table cellspacing="0" cellpadding="0" border="0"><thead><tr><th class="ui-th-column ui-state-default" colspan="3" class="privLabel"></th></tr><tr><th class="ui-th-column ui-state-default" style="width: 50px;">Allow</th><th class="ui-th-column ui-state-default" style="width: 50px;">Deny</th><th class="ui-th-column ui-state-default" style="width: 520px;">Privilege</th></tr></thead><tbody class="privTable"></tbody></table><button class="btnOk">Ok</button><button class="btnCancel">Cancel</button></div><div style="display:none;" class="newPrivPicker"><div style="font-size: 10pt"><table class="newPrivTable"></table><div class="newPrivPager"></div></div></div></div>');
                pager = $('.sidPager', this);
                enumerateUrl = this.data('options').aclControllerUrl + '/enumerate/aclid/' + this.data('options').aclId;
                sid = $('.sidList', this).jqGrid({
                    url: enumerateUrl,
                    datatype: 'json',
                    mtype: 'GET',
                    colNames: ['Type', 'Name'],
                    colModel: [
                        {name: 'type', index:'type', width: 20, align: 'center', sortable: false},
                        {name: 'displayName', index:'displayName', align: 'center', sortable: false}
                    ],
                    rowNum: 10,
                    rowList: [10, 100, 1000],
                    autowidth: true,
                    height: 'auto',
                    forceFit: true,
                    gridview: true,
                    pager: pager
                });
                sid.navGrid(pager, {
                    edit:false,
                    add:false,
                    del:false,
                    search:false,
                    refresh:true,
                    refreshtitle: 'Refresh Users and Groups'
                });
                return this;
            }
        };
    
        defaults = {
            aclId: 0,
            title: 'Permissions Editor',
            aclControllerUrl: ''
        };
    
        $.fn.acleditor = function (method) {
            if (methods[method]) {
                return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
            } else if (typeof method === 'object' || !method) {
                return methods.init.apply(this, arguments);
            } else {
                $.error('Method ' +  method + ' does not exist on jQuery.AclEditor.');
            }
            return null;
        };
    
    }(jQuery));
    

    为什么在jquery.js的第75行得到“未捕获语法错误,无法识别的表达式:”?

    哦,我使用的是jqgrid 3.8.1和jquery 1.4.2。

    编辑:返回的JSON是:

    {"rows":[{"id":"7109766F-DC8A-4134-8C1F-02F87A72DE9C","cell":["Group","Developers"]},{"id":"22EEB0C5-6792-4C24-8047-B187D38F63EC","cell":["Group","Users"]}],"page":1,"total":1,"records":2}
    
    2 回复  |  直到 12 年前
        1
  •  49
  •   Billy ONeal IS4    14 年前

    好吧,对不起,大家。找到了问题——原来jqgrid保存了表标记的ID,然后使用该标记引用了表。给予 <table> 一个ID解决了这个问题。

        2
  •  -1
  •   ozz    12 年前

    如果有人使用“jqgrid for asp.net mvc”来搜索此错误。我在保存“添加新的”对话框时得到了这个确切的错误。

    事实证明,我没有设置“mygridModel.addDialogSettings.closeAfterAdding=true;”