我有一个支持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?
感谢。
答案 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() },