web-dev-qa-db-ja.com

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

私は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
});

そして、これはウェブメソッドのシグネチャです

[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 }),

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

96
ChrisCa

文字列の連結を使用してパラメーターを渡すのではなく、データハッシュを使用するだけです。

$.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
});
135
Darin Dimitrov
data: '{"jewellerId":"' + filter + '","locale":"' + locale + '"}',
18
David Hedlund

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

 $.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
                });
7
pixeline

David Hedlundを除くすべての回答で、json文字列/オブジェクトが無効であることに気づいた人はいますか? :)

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

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

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

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

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

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

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


data: JSON.stringify(parameter)

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

2
Sumit Jambhale

[この行はAsp.netで完全に機能し、json Get:<%Field Name%>でWebコントロールフィールドを検索]を追加するだけです。

 data: "{LocationName:'" + document.getElementById('<%=txtLocationName.ClientID%>').value + "',AreaID:'" + document.getElementById('<%=DropDownArea.ClientID%>').value + "'}",
1
Milind bilonia
    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");
    }
    }); 
1
Jasbir Rana

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

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

....

data:dataParam

...

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

0
Subodh Patil

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

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