0

jqGrid データグリッドで問題が発生しました。「削除」ボタンで1行以上削除する必要があります。ここに私のコード:

$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 を「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] 
}

2 番目の問題については、Ajax ウィンドウが閉じない理由がわかりません。その時点で JavaScript エラーが発生するかどうかを確認するために、コードをデバッグしましたか? そうでない場合は、問題を示す小さな例を投稿する必要があるかもしれません。

于 2012-05-30T13:39:06.347 に答える
0

削除操作に HTTP GET を使用するのはよくありません。同じ URL に対する以前のサーバー応答がキャッシュされ、サーバーに送信されないようにしますか? のデフォルト値はmtypeです'POST'。サーバー側に RESTfull サービスがある場合はmtype: 'DELETE'、 を使用する必要がありますが、 の使用は'GET'、サーバー上の何も削除しないダミー コードに対してのみ意味があります。

さらにdataType: 'json'、存在しないパラメーターを使用しますdelGridRowドキュメントを参照)。使用してもajaxDelOptions: { datyType: "json" }、JSON からオブジェクトに自動的に変換されないサーバーの応答 (Justin の回答を参照) が得られます。その理由は、コールバックの代わりにコールバックをdelGridRow使用する現在のコードです(こちらを参照)。したがって、サーバーから JSON 応答を取得した場合は、コールバック内で明示的に$.parseJSONを呼び出す必要があります (ジャスティンの回答を参照してください)。completesuccessafterSubmit

于 2012-05-30T14:20:35.657 に答える