【问题标题】:postData not passing any parameters!postData 没有传递任何参数!
【发布时间】:2011-08-14 05:32:01
【问题描述】:

我无法在 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

谢谢,

一个

【问题讨论】:

    标签: jqgrid


    【解决方案1】:

    您当前的serializeGridData 实现只是删除 postData 中的所有函数参数。因此,您应该在serializeGridData 内扩展data 参数,而不是使用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);
    }
    

    在上面的代码中,我们枚举了所有属性并显式调用了所有函数。此外,我更喜欢使用来自json2.jsJSON.stringify 函数。该功能将在许多网络浏览器中原生实现。

    查看演示 here

    【讨论】:

    • @Oleg :我已经用你的代码替换了我的 serializeGridData。现在我可以看到在 firebug 中传递给服务器的参数。它工作正常。但它不会改变价值。它不断从控件中获取旧值。我认为 postData: part 应该处理这个问题。但它没有。谢谢
    • @user659469:您写道“但它不会改变价值。它会不断地从控件中获取旧值”。对不起,但我不明白你的意思是哪些控制和哪些价值。此外,您不会在任何时候发布您使用的 HTML。
    • @Oleg :我的意思是说我在 postData 部分中设置为参数的控制值。 postData: { 广告客户 ID: 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(); } }, CampaignsDdlSelectedValue,endDate,startDate 所有这些都不会改变!
    • @user659469:为什么您的意思是 jqGrid 应该更改包含网格之外的任何控件?
    • @Oleg:我以为我们正在讨论网格外的控件值!我明白你在说什么。但是我想将新值传递给服务器以获取 jqgrid 之外的控件。像日期范围(文本框),campaignID(下拉),它们在jqgrid之外。
    猜你喜欢
    • 1970-01-01
    • 2017-08-02
    • 2012-03-26
    • 2012-06-02
    • 2018-06-02
    • 2014-04-08
    • 1970-01-01
    • 2021-10-21
    • 2021-11-30
    相关资源
    最近更新 更多