postData не передает никаких параметров!

#jqgrid

#jqgrid

Вопрос:

Я не могу видеть никаких значений параметров, передаваемых на сервер в firebug. Вот код.

 
//BuyBackGridInit() start

function BuyBackGridInit(tabID){


        $('table[id$="' tabID '_BuyBackGrid"]').jqGrid({   
            url :'/Controls/Advertiser/BuyBackControlNew.ascx.ashx?action=getBuyBackData',
            datatype: 'json',
            mtype: 'POST', 
            height:'100%',
            width:'100%',
            colNames: result.colNamesData, 
            colModel: result.colModelData,
            postData: {
              advertiserID: function() { return $('#advertiser_id').text(); },
              CampaignsDdlSelectedValue: function() { return $('select[id$="CampaignDdl"] option:selected').val(); },
              startDate: function() { return $('input[id$="' tabID '_FromCalBuyBack_CalendarTbx"] ').val(); },
              endDate: function() { return $('input[id$="' tabID '_ToCalBuyBack_CalendarTbx"] ').val(); }
            },
            rowNum : 100,
            shrinkToFit :false,
            altRows: true,
            altclass:'altRow',
            autowidth: true,
            multiselect: true,
            gridComplete:function (){
              var recs = parseInt( $('table[id$="' tabID '_BuyBackGrid"]').getGridParam("records"),10);
              if (recs == 0){ 
                  $('div[id$="' tabID '_NoDataFoundBuyBackdiv"]').show();
                  $('input[id$="AddToCartBtn"]').hide();
                  $('input[id$="BuyBackDownloadBtn"]').hide();
              }
              else {
                  $('div[id$="' tabID '_NoDataFoundBuyBackdiv"]').hide();
                  $('input[id$="AddToCartBtn"]').show();
                  $('input[id$="BuyBackDownloadBtn"]').show();
              }
            },
            serializeGridData: function (data){ 
               return $.toJSON(data);   
            }
        });//end of jQuery("#BuyBackGrid").jqGrid()

}//BuyBackGridInit() End
  

Спасибо,

A

Ответ №1:

Ваша текущая реализация serializeGridData просто удаляет все параметры функций из postData . Поэтому вам следует либо расширить data параметр внутри serializeGridData вместо использования postData . Другой способ — изменить serializeGridData на следующее:

 serializeGridData: function (data){
    var propertyName, propertyValue, dataToSend = {};
    for (propertyName in data) {
        if (data.hasOwnProperty(propertyName)) {
            propertyValue = data[propertyName];
            if ($.isFunction(propertyValue)) {
                dataToSend[propertyName] = propertyValue();
            } else {
                dataToSend[propertyName] = propertyValue
            }
        }
   }
   return JSON.stringify(dataToSend);
}
  

В приведенном выше коде мы перечисляем все свойства и вызываем все функции явно. Более того, я предпочитаю использовать JSON.stringify функцию из json2.js. Функция будет встроена во многие веб-браузеры.

Смотрите демонстрацию здесь.

Комментарии:

1. @Oleg : Я заменил свои serializeGridData вашим фрагментом кода. Теперь я вижу, как параметры передаются на сервер в firebug. Это работает нормально. Но это не меняет значения. Он продолжает получать старые значения из элементов управления. Я думал, что postData: part должен позаботиться об этом. Но этого не произошло. Спасибо

2. @user659469: Вы написали «Но это не меняет значения. Он продолжает получать старые значения из элементов управления «. Извините, но я не понимаю, какие настройки и какие значения вы имеете в виду. Более того, вы ни разу не публиковали HTML, который используете.

3. @Oleg: Я имею в виду управляющие значения, которые я устанавливаю в качестве параметров внутри части postData. postData: { advertiserID: функция() { return $(‘#advertiser_id’).text(); }, CampaignsDdlSelectedValue: функция() { return $(‘выберите [id $=»CampaignDdl»] вариант: выбранный’).val(); }, StartDate: функция() { return $(‘ввод [id $=»‘ tabId ‘ _FromCalBuyBack_CalendarTbx»] ‘).val(); }, Конечная дата: функция() { return $(‘input[id $=»‘ tabId ‘_ToCalBuyBack_CalendarTbx»] ‘).val(); } }, CampaignsDdlSelectedValue, дата окончания, дата начала — все это не меняется!

4. @user659469: Почему вы имеете в виду, что jqGrid должен изменить содержание любых элементов управления, которые находятся за пределами сетки?

5. @Oleg: Я думал, мы обсуждаем значения элементов управления вне сетки! Я понимаю, о чем ты говоришь. Но я хочу передать новые значения на сервер для элементов управления вне jqgrid. Например, диапазон дат (текстовое поле), CampaignID (выпадающий список), которые находятся за пределами jqgrid.