0

我遇到了 jqGrid 数据网格的问题。我需要使用“删除”按钮删除一行或多行。这是我的代码:

$grid.navGrid('#pager', { edit: false, add: false, del: false, search: false });
$grid.navButtonAdd('#pager', {
    caption: "Delete",
    buttonicon: "ui-icon-del",
    position: "last",
    onClickButton: function() {
        alert("Deleting Row");
        row_ids = $grid.getGridParam('selarrrow');
        $grid.delGridRow(row_ids, {
            dataType: 'json',
            mtype: 'GET',
            url: '<?php echo $_SERVER['PHP_SELF'].'?app=my_app&action=record_delete'; ?>'
        });
    }
});

这段代码将所选行的 id/s 发送到“url:”选项(它有效)。该 url 以 json 格式返回一个响应。这个答案说明操作是否成功。我需要显示带有该消息的警报,我该怎么做?而且,另一个问题是,当我单击“删除”按钮(在 jqGrid 底部)时,它会显示一个带有问题“您要删除选定项目吗?”的 ajax 窗口,带有“是”输入和“否” “ 输入。当我单击“是”时,此 ajax 窗口将不会关闭!

谢谢!

但丁

编辑 [1] && [2]

$(document).ready(function()
{
    $grid = $("#list");
    fixPositionsOfFrozenDivs = function() {
        if (typeof this.grid.fbDiv !== "undefined") {
            $(this.grid.fbDiv).css($(this.grid.bDiv).position());
        }
        if (typeof this.grid.fhDiv !== "undefined") {
            $(this.grid.fhDiv).css($(this.grid.hDiv).position());
        }
    };

    $grid.jqGrid({
        url: '<?php echo $_SERVER['PHP_SELF'].'?app=my_app&option=get_records'; ?>',
        datatype: 'json',
        mtype: 'GET',
        height: 'auto',
        width: window.innerWidth-35, //width: '1225',
        colNames: ['ID', 'Column A', 'Column B', 'Column C', 'Column D'],
        colModel: [
            { name: 'id', index: 'id', width: 130, align: 'center', search: true,
                sortable: true, frozen: true, editable: true, edittype: 'text', formatter: 'showlink',
                editoptions: { size: 130, maxlength: 50 }, stype: 'text' },
            { name: 'col_a', index: 'col_a', width: 250, align: 'left', search: true,
                sortable: true, frozen: false, editable: true, edittype: 'text',
                editoptions: { size: 250, maxlength: 40 }, stype: 'text' },
            { name: 'col_b', index: 'col_b', width: 120, align: 'left', search: true,
                sortable: true, frozen: false, editable: true, edittype: 'text',
                editoptions: { size: 120, maxlength: 40 }, stype: 'text' },
            { name: 'col_c', index: 'col_c', width: 100, align: 'right', search: true,
                sortable: true, frozen: false, editable: true, edittype: 'text',
                editoptions: { size: 100, maxlength: 40 }, stype: 'text' },
            { name: 'col_d', index: 'col_d', width: 100, align: 'right', search: true,
                sortable: true, frozen: false, editable: true, edittype: 'text',
                editoptions: { size: 100, maxlength: 6 }, stype: 'text' }
        ],
        caption: 'Objects',
        pager: '#pager',
        sortname: 'id',
        sortorder: 'ASC',
        rowNum: 25,
        rowList: [25, 50, 100, 200, <?php echo $totrecords; ?>],
        loadonce: true,
        gridview: true,
        viewrecords: true,
        rownumbers: true,
        rownumWidth: 40,
        toppager: true,
        multiselect: true,
        autoencode: true,
        ignoreCase: true,
        shrinkToFit: false,
        loadComplete: function() {
            $("option[value=<?php echo $totrecords; ?>]").text('All');
        },
        editurl: '<?php echo $_SERVER['PHP_SELF'].'?app=my_app&option=delete_records'; ?>'
    });

    $grid.jqGrid('filterToolbar', {multipleSearch: false, stringResult: false, searchOnEnter: false, defaultSearch: 'cn'});
    $grid.navGrid('#pager', { edit: false, add: false, del: false, search: false });
    $grid.navButtonAdd('#pager', {
        caption: "Delete",
        buttonicon: "ui-icon-del",
        position: "last",
        onClickButton: function() {
            row_ids = $grid.getGridParam('selarrrow');
            $grid.delGridRow(row_ids, {
                closeOnEscape: true,
                mtype: 'POST',
                afterSubmit: function(data_from_server, array_data) {
                    var result = data_from_server.responseText;
                    var message = eval('(' + result + ')');
                    alert(message.query);
                }
            });
        }
    });

    $grid.jqGrid('setFrozenColumns');
    $grid[0].p._complete.call($grid[0]);
    fixPositionsOfFrozenDivs.call($grid[0]);

});
4

2 回答 2

1

您应该能够使用该afterSubmit事件来显示您的消息。从jqGrid 文档

提交后

从服务器收到响应后触发。通常用于显示来自服务器的状态(例如,数据已成功删除或由于服务器端原因取消删除)。接收从请求返回的数据和 id=value1,value2 类型的已发布值数组作为参数。使用此事件时,应返回包含以下项目的数组,[success, message] 其中success为布尔值,如果为 true,则流程继续,如果为 false,则出现错误消息并停止所有其他处理。

afterSubmit : function(response, postdata) 
{ 
  … 
  return [succes,message] 
}

关于您的第二个问题,我不确定为什么 Ajax 窗口不会关闭。您是否调试过代码以查看当时是否收到 JavaScript 错误?如果没有,您可能需要发布一个小示例来演示该问题。

于 2012-05-30T13:39:06.347 回答
0

使用 HTTP GET 进行删除操作并不好。您是否希望将同一 URL 上的先前服务器响应缓存而不发送到服务器?mtype默认值为'POST'。如果您在服务器端有 RESTfull 服务,您将需要使用mtype: 'DELETE',但使用'GET'只能对一些不会删除服务器上任何内容的虚拟代码有意义。

此外,您使用dataType: 'json'不存在的参数delGridRow(请参阅文档)。即使您会使用ajaxDelOptions: { datyType: "json" },您也会得到服务器响应(请参阅 Justin 的答案)不会自动从 JSON 转换为对象。原因是当前代码delGridRow使用complete回调而不是success回调(参见此处)。因此,如果您从服务器获得 JSON 响应,则必须在回调内部显式调用$.parseJSONafterSubmit(请参阅贾斯汀的回答)。

于 2012-05-30T14:20:35.657 回答