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

Javascript 在调用支持AJAX的WCF服务之前修改jqGrid的postData,javascript,ajax,wcf,json,jqgrid,Javascript,Ajax,Wcf,Json,Jqgrid,我有一个支持AJAX的WCF服务,其签名如下: [OperationContract] [WebGet] public JQGridContract GetJQGrid(int entityIndex) 以及以下资料合约: [DataContract] public class JQGridContract { [DataContract] public class Row { [DataMember]

我有一个支持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>();
    }
}  
下面是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参数正确:{“entityIndex”:6}

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

下面是wierd部分:

我记录了“entityIndex”,它实际上在WCF操作中工作——它总是显示为0


谢谢。

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


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

我不会批评您程序的风格。关于这件事我可以写太多了。:-)


您当前的主要问题可以通过使用
JSON.stringify(pdata.entityIndex())
而不是
JSON.stringify(params)
来解决,或者使用WFC方法的另一种
BodyStyle
来解决(详情请参见)

我让它工作起来了,这与Oleg说的很接近,只是您不需要执行JSON.stringify

如果您有WebMessageBodyStyle.WrappedRequest,则可以执行以下操作:

data: { entityIndex: pdata.entityIndex() },   
data: { "entityIndex": pdata.entityIndex() },  
或者,如果您没有车身造型,则此功能可以:

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

我让它工作了,它接近于Oleg所说的,只是你不需要做JSON.stringify

如果您有WebMessageBodyStyle.WrappedRequest,则可以执行以下操作:

data: { entityIndex: pdata.entityIndex() },   
data: { "entityIndex": pdata.entityIndex() },  
或者,如果您没有车身造型,则此功能可以:

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

样式问题是在WCF端还是在js端?我很快就把它拼凑起来,试图理解基本原理。最终,我希望jqGrid postData基于url查询字符串中的任何内容。首先,调用pdata.entityIndex()只返回6,而不是{“entityIndex”:6}。如果我将其更改为返回{“entityIndex”:6},我就回到了开始的地方。就像我说的,我在firebug中检查了'params'选项卡,它显示:{“entityIndex”:6}。不管WCF操作的BodyStyle如何,传递给该方法的实际值始终为0。@Sean:如果您发布演示项目的URL,我可以尝试找出我的建议不适用于您的原因。关于风格,我指的是客户部分。我发现将
datatype
用作函数的方法是错误的。看一个你可以下载完整的。通过实现分页、排序和过滤,您将发现@Sean:另外,关于样式。。。我在前面的一条评论中写道,
$(“#jqGrid”).setGridParam({datatype:'local'})的设置gridComplete
中的code>与
loadonce:true
的用法相同。那么,为什么要使用复杂的构造而不是简单的jqGrid参数呢?样式问题是在WCF方面还是在js方面?我很快就把它拼凑起来,试图理解基本原理。最终,我希望jqGrid postData基于url查询字符串中的任何内容。首先,调用pdata.entityIndex()只返回6,而不是{“entityIndex”:6}。如果我将其更改为返回{“entityIndex”:6},我就回到了开始的地方。就像我说的,我在firebug中检查了'params'选项卡,它显示:{“entityIndex”:6}。不管WCF操作的BodyStyle如何,传递给该方法的实际值始终为0。@Sean:如果您发布演示项目的URL,我可以尝试找出我的建议不适用于您的原因。关于风格,我指的是客户部分。我发现将
datatype
用作函数的方法是错误的。看一个你可以下载完整的。通过实现分页、排序和过滤,您将发现@Sean:另外,关于样式。。。我在前面的一条评论中写道,
$(“#jqGrid”).setGridParam({datatype:'local'})的设置gridComplete
中的code>与
loadonce:true
的用法相同。那么,为什么要使用复杂的构造而不是简单的jqGrid参数呢?我假设您在web.config中配置了输入和输出数据的JSON格式。我假设您在web.config中配置了输入和输出数据的JSON格式。