2012-04-19 3 views
0

У меня есть сетка данных с использованием editoptions:{dataUrl:'getMetadata?type=' + myType+ '&column=colOne'}. Я также связал функцию с событием ajaxComplete, чтобы выполнить пользовательскую проверку заголовка после того, как сделаны запросы. Это отлично работает во всем, что я видел с помощью запроса JQGrids, кроме запроса dataUrl. Ajax complete не запускается после выполнения запроса на получение. ajaxStart и ajaxStop действительно срабатывают соответственно. Полное/Ошибка/Успех нет.JQGrid editoptions dataurl не использует ajax get?

Согласно документации jqgrid для dataUrl, для захвата данных должен использоваться вызов 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 Выбор варианта выпуска здесь ------------ ------------

Следующий код при установке в любом месте (в настоящее время в документе.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 для подобных сетей

$("#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'); 

и, наконец, HTML возвращается от данных 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> 

Извините за стену текста, но я попытался добавить все, что может показаться полезным. Обратите внимание, что это отлично работает (выберите поля в заполнении поиска) по многочисленным (10+) jqgrids, которые у нас есть, пока не будет разрешено использование ajaxSelectOptions по умолчанию.

ответ

1

Я бы порекомендовал вам использовать опцию jqGrid для настройки запроса Ajax, который использует jqGrid для получения данных от dataUrl. Я надеюсь, что параметр ajaxSelectOptions может выглядеть в вашем случае как

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

«Эта опция позволяет задать глобальные параметры АЯКСА для выбора элемента, когда выбор получен с помощью опции dataUrl в editoptions или ориентировочной цене объектов» Так что специфично для сетка, к которой применяется опция? Я бы так предположил, но слово «глобальный» меня отбросило. – Joseph

+1

@Joseph: Если вам нужно сделать некоторые параметры по умолчанию, вы должны просто расширить '. $ .jgrid.defaults' (см. [Здесь] (http://stackoverflow.com/a/2678731/315935)). В вашем случае вы можете сделать '$ .extend ($. Jgrid.defaults, {ajaxSelectOptions: {complete: function (jqXHR) {if (jqXHR.getResponseHeader ('REQUIRES_AUTH') === '1') {location.reload ();}}}}); ' – Oleg

+0

Вы, сэр, очень помогли. Это сокращает количество кода, который я должен существенно изменить. – Joseph

Смежные вопросы