0

を使用したデータ グリッドがありますeditoptions:{dataUrl:'getMetadata?type=' + myType+ '&column=colOne'}ajaxCompleteまた、リクエストが行われた後にカスタム ヘッダー チェックを行うために、関数をイベントにバインドしました。これは、dataUrl リクエストを除く JQGrids リクエストで見たすべてのもので正常に機能しています。get リクエストが実行された後、Ajax complete は起動しません。 ajaxStartそしてajaxStop実際に適切に解雇されています。Complete/Error/Success ではありません。

dataUrl の jqgrid ドキュメントによると、データを取得するには ajax 呼び出しを使用する必要があります。

「データは AJAX 呼び出しを介して取得され、目的のオプションを持つ有効な HTML 選択要素である必要があります ...」

私がここで見逃しているものは他にありますか?以下のバインディングコード。

$('body').bind('ajaxComplete',function(event,request,settings){
    if (request.getResponseHeader('REQUIRES_AUTH') === '1'){
       location.reload();
    };
});
//Other binds added to see what is getting fired
$('body').bind('ajaxError',function(event,request,settings){
    if (request.getResponseHeader('REQUIRES_AUTH') === '1'){
       location.reload();
    };
});
$('body').bind('ajaxSuccess',function(event,request,settings){
    if (request.getResponseHeader('REQUIRES_AUTH') === '1'){
       location.reload();
    };
});
$('body').bind('ajaxStart',function(){
    var b = "ABC";
    var c = "DEF";
});
$('body').bind('ajaxStop',function(event,request,settings){
    var b = "ABC";
    var c = "DEF";
});

編集:リクエストが200ステータスで戻ってくることを追加するのを忘れました.

----------------------------- Ajax Select Options の問題はこちら---------------- --------

次のコードを任意の場所 (現在は document.ready 内) に配置すると、すべての選択ボックスが検索で表示されなくなります。

$.extend($.jgrid.defaults, {
            ajaxSelectOptions: {    
                complete: function (jqXHR) {
                    if (jqXHR.getResponseHeader('REQUIRES_AUTH') === '1') 
                    {
                        location.reload();
                    } 
                    return;
                }
        }});

ColModel と名前

    gridForm.colNames = ['ID','Field1','Field2','Field3','Field4','Field5','Last User Id','Modified Date' ];
gridForm.colModel = [
                      {name:'id', editable: false, edittype:'text',search:true, stype:'text'},        
                      {name:'Field1', editable: checkedOutByUser, edittype:'text', search:true,editrules:{required:true}, stype:'text'},
                      {name:'Field2', editable: checkedOutByUser, edittype:'select', editoptions:{dataUrl:dataUrl + "&search=false"}, search:true,editrules:{required:true}, searchoptions:{dataUrl:dataUrl + "&search=true"}, stype:'select'},
                      {name:'Field3',  editable: checkedOutByUser, edittype:'select', editoptions:{dataUrl:dataUrl + "&search=false"}, editrules:{required:true},search:true, searchoptions:{dataUrl:dataUrl + "&search=true"}, stype:'select'},
                      {name:'Field4',  editable: checkedOutByUser, edittype:'select', editoptions:{dataUrl:dataUrl + "&search=false"}, editrules:{required:true}, search:true, searchoptions:{dataUrl:dataUrl + "&search=true"}, stype:'select'},
                      {name:'Field5', editable: false, edittype:'text', search:true, stype:'text'},
                      {name:'userId', editable: false, edittype:'text', search:true, stype:'text'},
                      {name:'modifiedDate', editable: false, search:true, stype:'text', searchoptions:{dataInit:function(el){defaultCalendar.create(el, "componentGrid");}}}                             
                      ];

同様のグリッドに対して jqgrid 呼び出しを再利用できるように、いくつかの 3 進数ベースを使用するグリッド定義

    $("#myGrid").jqGrid(
        {
            caption:gridForm.caption,
            overflow:'hidden',
            url:gridForm.url?gridForm.url:url,
            height: gridForm.height?gridForm.height:'auto',
            datatype: "json",
            colNames:gridForm.colNames,
            colModel:gridForm.colModel,
            recordtext: 'Record(s) {0} - {1} of {2}', 
            rowNum: 20, 
            sortname: gridForm.sortindex?gridForm.sortindex:"id",
            sortorder: gridForm.sortorder?gridForm.sortorder:"desc",
            cellEdit: false,
            cellurl : 'updateRow', 
            editurl:'addRow',
            cellsubmit : 'remote',
            toolbarfilter: true,
            onCellSelect:gridForm.onCellSelect?gridForm.onCellSelect:null,
            pager: jQuery('#pager'),
            viewrecords: gridForm.viewrecords?gridForm.viewrecords:true,
            gridview: gridForm.gridview?gridForm.gridview:true,
            shrinkToFit: true,
            multiselect: gridForm.multiselect?gridForm.multiselect:true});
jQuery("#myGrid").jqGrid('filterToolbar');

最後に、データ URL から返される HTML

<select><option value=''</option><option value='Dummy Entry'>Dummy Entry</option><option value='Next Entry'>Next Entry</option><option value='ThirdEntry'>ThirdEntry</option><option value='FourthEntry'>FourthEntry</option></select>

テキストの壁については申し訳ありませんが、役立つと思われるものをすべて追加しようとしました. これは、ajaxSelectOptions のデフォルトを有効にするまで、多数の (10 以上の) jqgrid で完全に機能していることに注意してください (検索入力でボックスを選択)。

4

1 に答える 1

1

jqGrid のajaxSelectOptionsオプションを使用して、jqGrid を使用して からデータを取得する Ajax リクエストをカスタマイズすることをお勧めしますdataUrlajaxSelectOptionsあなたの場合、パラメーターが次のようになることを願っています

ajaxSelectOptions: {
    complete: function (jqXHR) {
        if (jqXHR.getResponseHeader('REQUIRES_AUTH') === '1') {
            location.reload();
        }
    }
}
于 2012-04-19T15:37:53.747 に答える