{"消息":"无效的Web服务调用,缺少参数值:\ u0027PersonID \ u0027。"

时间:2017-07-11 15:55:44

标签: javascript c# jquery ajax jqgrid

我试图通过asmx webservice进行ajax调用以在jqgrid中提取数据,但我收到此无效的Web服务调用,缺少参数错误的值。

如果我删除了web服务调用和ajax请求中的输入参数,该函数效果很好但是一旦我有输入参数,问题就会持续存在。

以下是网络服务方法

    [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参数执行某些操作。

3 个答案:

答案 0 :(得分:0)

您是否尝试过更改

data: "{'PersonID': '" + personId + "'}",

postData: "{'PersonID': '" + personId + "'}",

因为您似乎在serializeGridData函数中引用了postData。

答案 1 :(得分:0)

选项

 data: "{'PersonID': '" + personId + "'}"

包含两个错误:

  1. jqGrid不要“知道”data参数,它存在于jQuery.ajax中。而不是那个可以使用postData参数。
  2. {'PersonID': 'same_value'}这样的字符串是错误的JSON字符串,因为JSON需要使用"而不是'。您可以按使用情况修复代码
  3. 如果您使用datapostData作为JSON字符串,则应删除serializeGridData
  4. postData: '{"PersonID": "' + personId + '"}'
    

    但是这样的代码仍然包含错误的代码。我建议你改用JSON.stringify,将对象转换为JSON字符串:

    postData: JSON.stringify({PersonID: personId})
    

    或者,您可以删除datapostData并使用以下serializeGridData

    serializeGridData: function () {
        return JSON.stringify({PersonID: personId});
    }
    

    这样的回调函数忽略了发送jqGrid的标准参数,它将以JSON格式发送PersonID参数。

答案 2 :(得分:0)

根据定义,postData参数是一个对象,它不能是一个字符串。更多类型的参数can be read here

所以,恕我直言,明确的解决方案是将postData设置为对象并使用serializeGridData,如下所示:

...jqGrid({
    ...
    postData : { "PersonID" : personId },
    serializeGridData : function( postData ) {
        return JSON.stringify(postData);
    },
    ...
 });

亲切的问候