2012-04-19 15 views
0

私はeditoptions:{dataUrl:'getMetadata?type=' + myType+ '&column=colOne'}を使ってデータグリッドを持っています。また、要求が行われた後にカスタムヘッダチェックを行うために、ajaxCompleteイベントに関数をバインドしました。これは、dataUrlリクエスト以外のJQGridsリクエストで見たすべてのものでうまくいきます。 get要求が実行された後、Ajax completeは起動しません。 ajaxStartajaxStopが実際に適切に発射されています。完全/エラー/成功はありません。JQGrid editoptions dataurl ajax getを使用していませんか?

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

のデータは、AJAX呼び出しを介して取得され、必要なオプションを持つ有効なHTMLのselect要素でなければなりません... '

は、私がここに欠けている何か他のものはありますか?下のコードをバインドする。

$('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オプションの問題をここで選択してください------------ ------------

次のコードはどこに置かれていても(現在document.readyにある)、すべての選択ボックスが検索に表示されません。 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コールを再使用することができますベースのいくつかの三元を使用して、HTMLが返される

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

データURLから

<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に完全にうまくいきました。

答えて

1

dataUrlからデータを取得するためにjqGridを使用するAjaxリクエストをカスタマイズするには、ajaxSelectOptionsのjqGridオプションを使用することをお勧めします。私はそうと、その特定がある「このオプションは選択がeditoptionsまたはsearchoptionsオブジェクトにdataUrlオプションを介して取得されたときにselect要素のためのグローバルなAjaxの設定を行うことができます」パラメータajaxSelectOptions

ajaxSelectOptions: { 
    complete: function (jqXHR) { 
     if (jqXHR.getResponseHeader('REQUIRES_AUTH') === '1') { 
      location.reload(); 
     } 
    } 
} 
+0

のように、あなたのケースで見ることができることを願っていますグリッドはオプションが適用されますか?私はそう思うだろうが、「グローバル」という言葉は私を少し捨てる。 – Joseph

+1

@Joseph:いくつかのオプションをデフォルトにする必要がある場合は、 '$ .jgrid.defaults'を拡張するだけです([here](http://stackoverflow.com/a/2678731/315935)を参照)。あなたの場合、$ .extend($ .jgrid.defaults、{ajaxSelectOptions:{complete:function(jqXHR){if(jqXHR.getResponseHeader( 'REQUIRES_AUTH')=== '1'){location.reload );}}}}); ' – Oleg

+0

あなたはとても役に立ちます。これは、私がかなり変更しなければならないコードの量を削減します。 – Joseph

関連する問題