複数のパラメーターをjQuery ajax呼び出しに渡す


99

aspxページでwebmethodを呼び出す次のjqueryコードがあります

$.ajax({
    type: "POST",
    url: "popup.aspx/GetJewellerAssets",
    contentType: "application/json; charset=utf-8",
    data: '{"jewellerId":' + filter + '}',
    dataType: "json",
    success: AjaxSucceeded,
    error: AjaxFailed
});

そしてここにWebメソッドのシグネチャがあります

[WebMethod]
public static string GetJewellerAssets(int jewellerId)
{

これは正常に動作します。

しかし今、私は2つのパラメータをWebメソッドに渡す必要があります

新しいWebメソッドは次のようになります

[WebMethod]
public static string GetJewellerAssets(int jewellerId, string locale)
{
}

この新しいメソッドシグネチャを正常に呼び出すようにクライアントコードを変更するにはどうすればよいですか?

編集:

次の2つの構文が機能しました

data: '{ "jewellerId":' + filter + ', "locale":"en" }',

そして

data: JSON.stringify({ jewellerId: filter, locale: locale }),

ここで、フィルターとロケールはローカル変数です


9
data: JSON.stringify({ jewellerId: filter, locale: locale })私が見つけた中で最良の方法です。ありがとう@ChrisCa
Frank Myat Thu

あなたが私のような悲しい魂なら、何時間もこれにこだわっているかもしれません。JSON.stringifyオブジェクトリテラルで使用する場合は、パラメータ名をコロンで囲み、すべて中{}括弧で囲む必要があります。を使用JSON.stringify(objectLiteral)しても機能しません。
カレブアンダーソン

メソッドのシグネチャのような [WebMethod] [ScriptMethod(UseHttpGet = true)] public static string TestIBAN(string ccc)
Kiquenet 2016年

回答:


141

文字列連結を使用してパラメーターを渡さないでください。データハッシュを使用してください。

$.ajax({
    type: 'POST',
    url: 'popup.aspx/GetJewellerAssets',
    contentType: 'application/json; charset=utf-8',
    data: { jewellerId: filter, locale: 'en-US' },
    dataType: 'json',
    success: AjaxSucceeded,
    error: AjaxFailed
});

更新:

コメントセクションの@Alexで示唆されているように、ASP.NET PageMethodは、リクエストでパラメーターがJSONエンコードされていることを想定しているためJSON.stringify、データハッシュに適用する必要があります。

$.ajax({
    type: 'POST',
    url: 'popup.aspx/GetJewellerAssets',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({ jewellerId: filter, locale: 'en-US' }),
    dataType: 'json',
    success: AjaxSucceeded,
    error: AjaxFailed
});

12
JSON.stringify( myObject )パラメータを後でクラスにグループ化する場合に備えて、を使用してJavaScriptオブジェクトからJSON文字列を作成することも検討してください。
Alex Bagnolini

1
返信ありがとう-しかし、そのようにしようとすると、httpステータス500が表示されます。何か案は?それともデバッグする方法?Webメソッドのブレークポイントがヒットすることはありません
ChrisCa

1
次の新しいコード$ .ajax({type: 'POST'、url: 'popup.aspx / GetJewellerAssets'、contentType: 'application / json; charset = utf-8'、data:{jewellerId:filter、locale: 'en -US '}、dataType: "json"、成功:AjaxSucceeded、エラー:AjaxFailed});
ChrisCa

1
デバッグするには、最初にサーバーの正確な応答をFireBugで確認し、次にWebサービスメソッドにブレークポイントを設定して、到達したかどうかを確認します。
Darin Dimitrov

1
WebメソッドのブレークポイントがヒットすることはありませんFirebugはSystem.Web.Script.Serializationで「メッセージ」:「無効なJSONプリミティブ:jewellerId。」、「StackTrace」: "を表示しているので、jsonの構文は正しくありません
ChrisCa

18
data: '{"jewellerId":"' + filter + '","locale":"' + locale + '"}',

1
これは働いていた:「{ 『jewellerId』:」+フィルタ+「 『ロケール』: 『エン』}」。、(明らかに私はアンにロケールをハードコーディングされませんが、これは働いていた構文です
ChrisCa

これはMVC 3でうまくいきました。Darinのやり方がうまくいきませんでした。おそらくMVC 3だと思います。
フィアット、2012年

7

必要な数のプロパティをデータオブジェクトに追加するだけです。

 $.ajax({
                    type: "POST",
                    url: "popup.aspx/GetJewellerAssets",
                    contentType: "application/json; charset=utf-8",
                    data: {jewellerId: filter , foo: "bar", other: "otherValue"},
                    dataType: "json",
                    success: AjaxSucceeded,
                    error: AjaxFailed
                });

1
この場合data、サーバー側でプロパティを読み取るためのwebmethodシグネチャはどのようになりますか?
Flo 2017

5

ajax呼び出しを使用してデータを送信するために以下のメソッドを使用しないでください

data: '{"jewellerId":"' + filter + '","locale":"' + locale + '"}'

誤ってユーザーが一重引用符や二重引用符などの特殊文字を入力すると、間違った文字列が原因でajax呼び出しが失敗します。

以下のメソッドを使用して、問題なくWebサービスを呼び出します

var parameter = {
       jewellerId: filter,
       locale : locale 
};


data: JSON.stringify(parameter)

上記のパラメーターにはJavaScriptオブジェクトの名前があり、それをajax呼び出しのデータ属性に渡すときに文字列化します。


3

David Hedlund以外のすべての回答でjson文字列/オブジェクトが無効であることに他の誰かが気付いたことがありますか?:)

JSONオブジェクトは次の方法でフォーマットする必要があります:{"key":( "value" | 0 | false)}。また、文字列としてそれを書き出すことは、オブジェクトを文字列化することよりもはるかに少ない...


3
$.ajax({
    type: 'POST',
    url: 'popup.aspx/GetJewellerAssets',      
    data: "jewellerId=" + filter+ "&locale=" +  locale,  
    success: AjaxSucceeded,
    error: AjaxFailed
});

タイプを使用して作業する:GET
Kiquenet 2016年

または、配列を使用してjason.stringyfy(array)でデータを渡すことができます。
Shekhar Patel

1

追加するだけです[この行はAsp.netで完全に機能し、jasonでWebコントロールフィールドを見つけるEg:<%Fieldname%>]

 data: "{LocationName:'" + document.getElementById('<%=txtLocationName.ClientID%>').value + "',AreaID:'" + document.getElementById('<%=DropDownArea.ClientID%>').value + "'}",

1
    var valueOfTextBox=$("#result").val();
    var valueOfSelectedCheckbox=$("#radio:checked").val();

    $.ajax({
    url: 'result.php',
    type: 'POST',
    data: { forValue: valueOfTextBox, check : valueOfSelectedCheckbox } ,
    beforeSend: function() {

          $("#loader").show();
       },
    success: function (response) {
       $("#loader").hide();
       $("#answer").text(response);
    },
    error: function () {
        //$("#loader").show();
        alert("error occured");
    }
    }); 

0

渡すデータに関するすべて。文字列を適切にフォーマットする必要があります。空のデータを渡す場合、data:{}が機能します。ただし、複数のパラメーターがある場合は、適切にフォーマットする必要があります。

var dataParam = '{' + '"data1Variable": "' + data1Value+ '", "data2Variable": "' + data2Value+ '"' +  '}';

....

data:dataParam

...

理解する最良の方法は、詳細なエラーを知るために、適切なメッセージパラメータを持つエラーハンドラを用意することです。


0

私はjsonを使用して複数のパラメータを正常に渡しました

data: "{'RecomendeeName':'" + document.getElementById('txtSearch').value + "'," + "'tempdata':'" +"myvalue" + "'}",

前に「クリーニング」を行わずにユーザーデータをパラメーターに渡さないでください。
fcm 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.