{"Message":"Invalid web service call, missing value for parameter: \u0027PersonID\u0027."
{"Message":"Invalid web service call, missing value for parameter: \u0027PersonID\u0027."
我正在尝试通过 asmx webservice 进行 ajax 调用以提取 jqgrid 中的数据,但我收到此无效的 web 服务调用,缺少参数值错误。
如果我删除 Web 服务调用和 ajax 请求中的输入参数,该函数运行良好,但一旦我有了输入参数,问题仍然存在。
以下是web服务方法
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public PersonsGrid Per(string PersonID)
{
....
return personsGrid;
}
以下是 Ajax 调用:
function getGridInfo() {
var personId = document.getElementById('txtPersonID').value;
$("#PersonsInfo").jqGrid({
url: '/Service/PersonsService.asmx/GetPersonsInfo',
data: "{'PersonID': '" + personId + "'}",
datatype: 'json',
mtype: 'POST',
async: false,
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
serializeGridData: function (postData) {
return JSON.stringify(postData);
},
jsonReader: { repeatitems: false, root: "d.rows", page: "d.page", total: "d.total", records: "d.records" },
loadonce: false,
colNames: ['ID', 'FirstName', 'LastName', 'Email', 'Phone'],
colModel: [
{ name: 'FirstName', index: 'FirstName', width: 100 },
{ name: 'LastName', index: 'LastName', width: 100 },
{ name: 'Email', index: 'Email', width: 100 },
{ name: 'Phone', index: 'Phone', width: 100 }
],
rowNum: 10,
rowList: [10, 20, 30],
viewrecords: true,
gridview: true,
rownumbers: true,
caption: 'Persons info',
loadError: function (xhr, textStatus, errorThrown) {
var error_msg = xhr.responseText;
var msg = "Some error occured during processing:";
msg += '\n\n' + error_msg;
alert(msg);
}
});
关于如何解决这个问题的任何想法。我关注了其他几个帖子,但仍然没有用。它必须对 ajax 请求中的数据参数做一些事情。
你尝试过改变
data: "{'PersonID': '" + personId + "'}",
至
postData: "{'PersonID': '" + personId + "'}",
您似乎在 serializeGridData 函数中引用了 postData。
选项
data: "{'PersonID': '" + personId + "'}"
包含两个错误:
- jqGrid 没有 "know"
data
参数,它存在于 jQuery.ajax 中。而不是那个可以使用 postData
参数。
- 像
{'PersonID': 'same_value'}
这样的字符串是错误的JSON字符串,因为JSON要求使用"
而不是'
。您可以通过用法修复代码
- 如果您使用
data
或 postData
作为 JSON 字符串,那么您应该删除 serializeGridData
。
postData: '{"PersonID": "' + personId + '"}'
但是这样的代码仍然会包含错误代码。我建议您改用 JSON.stringify
,它将对象转换为 JSON string:
postData: JSON.stringify({PersonID: personId})
或者您可以删除 data
和 postData
并使用以下 serializeGridData
:
serializeGridData: function () {
return JSON.stringify({PersonID: personId});
}
这样的回调函数忽略标准参数,它发送 jqGrid,它会发送 JSON 格式的 PersonID
参数。
根据定义,postData 参数是一个对象,不能是字符串。更多参数类型can be read here
所以,恕我直言,明确的解决方案是将 postData 设置为对象并像这样使用 serializeGridData:
...jqGrid({
...
postData : { "PersonID" : personId },
serializeGridData : function( postData ) {
return JSON.stringify(postData);
},
...
});
亲切的问候
我正在尝试通过 asmx webservice 进行 ajax 调用以提取 jqgrid 中的数据,但我收到此无效的 web 服务调用,缺少参数值错误。
如果我删除 Web 服务调用和 ajax 请求中的输入参数,该函数运行良好,但一旦我有了输入参数,问题仍然存在。
以下是web服务方法
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public PersonsGrid Per(string PersonID)
{
....
return personsGrid;
}
以下是 Ajax 调用:
function getGridInfo() {
var personId = document.getElementById('txtPersonID').value;
$("#PersonsInfo").jqGrid({
url: '/Service/PersonsService.asmx/GetPersonsInfo',
data: "{'PersonID': '" + personId + "'}",
datatype: 'json',
mtype: 'POST',
async: false,
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
serializeGridData: function (postData) {
return JSON.stringify(postData);
},
jsonReader: { repeatitems: false, root: "d.rows", page: "d.page", total: "d.total", records: "d.records" },
loadonce: false,
colNames: ['ID', 'FirstName', 'LastName', 'Email', 'Phone'],
colModel: [
{ name: 'FirstName', index: 'FirstName', width: 100 },
{ name: 'LastName', index: 'LastName', width: 100 },
{ name: 'Email', index: 'Email', width: 100 },
{ name: 'Phone', index: 'Phone', width: 100 }
],
rowNum: 10,
rowList: [10, 20, 30],
viewrecords: true,
gridview: true,
rownumbers: true,
caption: 'Persons info',
loadError: function (xhr, textStatus, errorThrown) {
var error_msg = xhr.responseText;
var msg = "Some error occured during processing:";
msg += '\n\n' + error_msg;
alert(msg);
}
});
关于如何解决这个问题的任何想法。我关注了其他几个帖子,但仍然没有用。它必须对 ajax 请求中的数据参数做一些事情。
你尝试过改变
data: "{'PersonID': '" + personId + "'}",
至
postData: "{'PersonID': '" + personId + "'}",
您似乎在 serializeGridData 函数中引用了 postData。
选项
data: "{'PersonID': '" + personId + "'}"
包含两个错误:
- jqGrid 没有 "know"
data
参数,它存在于 jQuery.ajax 中。而不是那个可以使用postData
参数。 - 像
{'PersonID': 'same_value'}
这样的字符串是错误的JSON字符串,因为JSON要求使用"
而不是'
。您可以通过用法修复代码 - 如果您使用
data
或postData
作为 JSON 字符串,那么您应该删除serializeGridData
。
postData: '{"PersonID": "' + personId + '"}'
但是这样的代码仍然会包含错误代码。我建议您改用 JSON.stringify
,它将对象转换为 JSON string:
postData: JSON.stringify({PersonID: personId})
或者您可以删除 data
和 postData
并使用以下 serializeGridData
:
serializeGridData: function () {
return JSON.stringify({PersonID: personId});
}
这样的回调函数忽略标准参数,它发送 jqGrid,它会发送 JSON 格式的 PersonID
参数。
根据定义,postData 参数是一个对象,不能是字符串。更多参数类型can be read here
所以,恕我直言,明确的解决方案是将 postData 设置为对象并像这样使用 serializeGridData:
...jqGrid({
...
postData : { "PersonID" : personId },
serializeGridData : function( postData ) {
return JSON.stringify(postData);
},
...
});
亲切的问候