2015-04-14 2 views
1

Я создал внешние три флажка.Как остановить запрос отправки URL (setGridParam) в Jqgrid?

Сначала я проверяю флажок Male, отправляя запрос на бэкэнд, время отклика от 30 до 50 секунд. Но внезапно я нажимаю кнопку «Женский», а не отправляю параметр женского значения на бэкэнд.

SO Я хочу прекратить отправку запроса. Отправить новый запрос с новыми параметрами.

Предыдущий запрос завершен после отправки нового запроса.

Когда я проверяю «Все», для получения ответа требуется 2-3 минуты. Пока ответ не будет получен, ни один другой параметр не может быть установлен/отправлен. Например: если я проверяю «Все», я не могу отправить параметр для отмены или проверки «Мужской» или «Женский», пока не получаю ответ «Все». Я использую setGridParam и получаю данные в формате JSON.

это занимает 2-3 минуты, чтобы принести

$("#sex,#age).change(function() { 

var sexVal=$("#sex").val(); 
//sexVal values are Male, Female and All 

var listURL='localset.php?mode=yes&sex='+sexVal; 
$("#list451").jqGrid("clearGridData", true); 
jQuery("#list451").jqGrid('setGridParam',{url : listURL,mtype:'POST',datatype:'json'}).trigger("reloadGrid"); 

}); 


jQuery("#list451").jqGrid({ 
    url: 'localset.php?mode=yes', 
    datatype: "json", 
    height: 255, 
    width: 600, 
    colNames: ['Index', 'Name', 'Code', 'N Name', 'C Name'], 
    colModel: [{ 
      name: 'item_id', 
      index: 'item_id', 
      width: 65, 
      sorttype: 'integer', 
      searchoptions: { 
       sopt: ['eq', 'ne', 'le', 'lt', 'gt', 'ge'] 
      } 
     }, { 
      name: 'name', 
      index: 'name', 
      width: 150, 
      sorttype: 'string', 
      searchoptions: { 
       sopt: [cn] 
      } 
     }, { 
      name: 'code', 
      index: 'code', 
      width: 150, 
      sorttype: 'string', 
      searchoptions: { 
       sopt: ['eq', 'bw', 'bn', 'cn', 'nc', 'ew', 'en'] 
      } 
     }, { 
      name: 'sex', 
      index: 'sex', 
      width: 150, 
      sorttype: 'string', 
      searchoptions: { 
       sopt: [cn] 
      } 
     }, { 
      name: 'c_name', 
      index: 'c_name', 
      width: 150, 
      sorttype: 'string', 
      searchoptions: { 
       sopt: [cn] 
      } 
     }, 
     rowNum: 50, 
     rowTotal: 200, 
     rowList: [20, 30, 50], 
     loadonce: true, 
     mtype: "POST", 
     rownumbers: true, 
     rownumWidth: 40, 
     gridview: true, 
     pager: '#pager451', 
     sortname: 'item_id', 
     viewrecords: true, 
     sortorder: "asc", 
     caption: "External Check box Demo" 
    }); jQuery("#list451").jqGrid('filterToolbar', { 
    searchOperators: true 
}); 
+0

Извините, но ваш вопрос недостаточно ясен. Какой точный сценарий у вас есть (шаг за шагом)? Какое поведение вы хотите реализовать? Если вы хотите отправить параметр 'sex' на сервер, вы можете использовать' postData: {sex: function() {return $ ("# sex"). Val(); }} '. В случае, если каждый запрос на сервер будет содержать текущее значение элемента управления '' #sex''. Вы хотите загрузить сетку только после того, как сможете использовать 'loadonce: true'. Вы можете отключить '' #sex '' управление в любое время путем использования '$ (" # sex "). Prop (" disabled ", true)'. Существует много сценариев, но неясно, что вы хотите реализовать. – Oleg

+0

Когда я проверяю «Все», для получения ответа требуется 2-3 минуты. Пока ответ не будет получен, ни один другой параметр не может быть установлен/отправлен. Например: если я проверяю «Все», я не могу отправить параметр для отмены или проверки «Мужской» или «Женский», пока не получаю ответ «Все». Я использую setGridParam и получаю данные в формате JSON. Требуется 2-3 минуты, чтобы получить –

+0

У меня есть дополнительные опции, как флажок, выпадающий, текстовое поле. Его комплекс для изменения кода и отображения кода формата JSON. Вот почему я использую setGridParam. –

ответ

1

Если я правильно понял ваш вопрос, который вы хотите отменить предыдущий запрос Ajax. Вы должны сделать две вещи для него:

  1. отключить оверлей, созданный в начале запроса Ajax
  2. выполнить abort метод отложенного запроса Ajax.

Чтобы удалить накладку и сбросить $("#list451")[0].grid.hDiv.loading используемый jqGrid для внутренних целей, вы можете просто позвонить $("#list451")[0].endReq().

Вы можете использовать обратный вызов loadBeforeSend, например, для кэширования jqXHR последнего запроса Ajax. Вам нужно просто сохранить первый параметр обратного вызова в переменной, находящейся под контролем во внешней области. Вы можете вызвать метод abort(), чтобы прервать предыдущий запрос.

+0

Олег, спасибо большое .......... –

+0

@ Кришнакумар Суббайян: Добро пожаловать ! – Oleg