2017-07-11 38 views
0

asmx webservice経由でjqgridのデータをプルアップするためにajaxコールを作成しようとしていますが、このエラーが発生しています。{"メッセージ": "無効なウェブサービス呼び出し、パラメータの値がありません: u0027PersonID u0027"

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パラメータで何かをしなければなりません。

+0

ことはあなたのMTYPEはGET」すべきではありません'ではなく' POST 'ですか? – swatsonpicken

+0

それでも、私は同じエラーが出るでしょう、私はまた、Webメソッドでusehttpget = trueを追加しました。 –

答えて

0

オプション

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

は、2つのエラーが含まれています:

  1. jqGridはjQuery.ajaxに存在するdataパラメータを、 "知っている" はありません。代わりにpostDataパラメータを使用できます。
  2. {'PersonID': 'same_value'}のような文字列は、JSONが'の代わりに"を使用する必要があるため、間違ったJSON文字列です。コードを用途によって修正できます
  3. dataまたはpostDataをJSON文字列として使用する場合は、serializeGridDataを削除する必要があります。
postData: '{"PersonID": "' + personId + '"}' 

が、そのようなコードはまだ不正なコードが含まれています。

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

このようなコールバック関数は無視します:

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

はまた、あなたがserializeGridDatadataを削除し、postDataをして使用することができます:私はあなたがJSONのオブジェクトを文字列に変換する代わりにJSON.stringifyを、使用することをお勧めしますjqGridを送信する標準パラメータであり、代わりにPersonIDパラメータをJSON形式で送信します。

+0

これはうまくいきました。代替オプションを使用しました serializeGridData:function(){ JSON.stringify({PersonID:personId}); } –

0

はあなたがserializeGridData機能でPOSTDATAを参照するように見えるよう

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

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

を変更しようとしています。

+0

私もそれを試みましたが、それでも同じエラーメッセージを表示しています –

0

定義により、postDataパラメータはオブジェクトであり、文字列にすることはできません。パラメータcan be read here

のタイプのより多くのように、透明な溶液がオブジェクトとしてPOSTDATAを設定すると、このようserializeGridDataを使用することです私見:

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

種類よろしく

+0

[jQuery.ajax](http://api.jquery.com/jquery.ajax/)では、 'data'パラメータの値として' string'を使用することができます。通常は 'PlainObject'だけでなく、関数 '$ .extend()'は、最初のパラメータで 'string'で呼び出すことができ、文字列は変更されません。したがって、 'postData:"いくつかの文字列 "は、' data :: "という文字列で' $ .ajax'を呼び出すための短い形式として使用できます。 'type:" POST "を使うと、文字列" some string "はAjaxリクエストの本体に置かれます。したがって、 'postData:"いくつかの文字列 "も動作します。サーバが期待するように 'postData'の文字列値を作成するだけでよいのです。 – Oleg

+0

確かにそうですが、変数を追加する必要がある場合は、パラメータを指定して文字列を作成するのは非常に困難です。多くの '+ 'と' 'を追加する必要があります。最初にオブジェクトを構築してJSON.stringifyを使用してください。しかし、最終的にはこれが選択の問題です。 –

関連する問題