在调用支持AJAX的WCF服务之前修改jqGrid的postData

时间:2011-06-14 18:25:12

标签: javascript ajax wcf json jqgrid

我有一个支持AJAX的WCF服务,其签名如下:

       [OperationContract]
       [WebGet]
       public JQGridContract GetJQGrid(int entityIndex)

以下数据合同:

[DataContract]
public class JQGridContract
{
    [DataContract]
    public class Row
    {
        [DataMember]
        public int id { get; set; }

        [DataMember]
        public List<string> cell { get; set; }

        public Row()
        {
            cell = new List<string>();
        }
    }

    [DataMember]
    public int page { get; set; }

    [DataMember]
    public int total { get; set; }

    [DataMember]
    public int records { get; set; }

    [DataMember]
    public List<Row> rows { get; set; }

    public JQGridContract()
    {
        rows = new List<Row>();
    }
}  

基本上我需要更改客户端jqGrid的postData以将'entityIndex'发送到此服务。

我已经阅读了它应该如何运作以及我可以告诉它应该如何工作:

 function loadGrid() {

    $("#jqGrid").jqGrid({

        postData: { entityIndex : function () {    // modify the data posted to AJAX call here

            return 6;   

          })
        },
        gridComplete: function () {

            $("#jqGrid").setGridParam({ datatype: 'local' });
        },
        datatype: function (pdata) {
            getData(pdata);
        },

这是getData()函数:

  function getData(pdata) {

    var params = new Object();

    alert(pdata.entityIndex());               // this displays '6', correctly

    params.entityIndex = pdata.entityIndex(); 


    $.ajax(
            {
                type: "GET",
                contentType: "application/json; charset=utf-8",
                url: "AJAXService.svc/GetJQGrid",
                data: JSON.stringify(params),
                dataType: "json",
                success: function (data, textStatus) {
                    if (textStatus == "success") {
                        var thegrid = $("#jqGrid")[0];

                        thegrid.addJSONData(data.d);
                    }
                },
                error: function (data, textStatus) {
                    alert('An error has occured retrieving data!');
                }
            });

我在Firebug中证实了以下内容:

1)json params是正确的:{“entityIndex”:6}

2)AJAX服务将JSON数据返回到网格,它只是错误的数据

这是一个奇怪的部分:

我记录了实际在WCF操作中工作的'entityIndex' - 它的总是为0?

感谢。

2 个答案:

答案 0 :(得分:1)

我不会批评你的节目风格。我可以写太多关于此的事情。 : - )

您当前的主要问题可以通过使用JSON.stringify(pdata.entityIndex())代替JSON.stringify(params)或使用另一个BodyStyle WFC方法来解决(有关详细信息,请参阅here

答案 1 :(得分:0)

我得到它的工作,它接近Oleg说的,只是你不需要做JSON.stringify。

如果您有WebMessageBodyStyle.WrappedRequest,则可以:

data: { entityIndex: pdata.entityIndex() },   

如果您没有BodyStyle,则可以使用:

data: { "entityIndex": pdata.entityIndex() },