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

여기에 웹 메소드 서명이 있습니다.

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

이것은 잘 작동합니다.

하지만 이제 웹 메서드에 두 개의 매개 변수를 전달해야합니다.

새로운 웹 메소드는 다음과 같습니다.

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

이 새 메서드 서명을 성공적으로 호출하기 위해 클라이언트 코드를 어떻게 변경합니까?

편집하다:

다음 두 가지 구문이 작동했습니다.

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)이 작동하지 않습니다.
Kaleb Anderson

같은 방법 서명 [WebMethod] [ScriptMethod(UseHttpGet = true)] public static string TestIBAN(string ccc)?
Kiquenet

답변:


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 2009

1
답장을 보내 주셔서 감사합니다.하지만 이렇게 시도하면 http 상태가 500이됩니다. 어떤 아이디어? 또는 디버그하는 방법? 웹 메서드의 중단
점이

1
$ .ajax ({type : 'POST', url : 'popup.aspx / GetJewellerAssets', contentType : 'application / json; charset = utf-8', 데이터 : {jewellerId : filter, locale : 'en -US '}, dataType : "json", 성공 : AjaxSucceeded, 오류 : AjaxFailed});
ChrisCa 2009

1
디버깅하려면 먼저 FireBug에서 서버의 정확한 응답을 확인한 다음 웹 서비스 메서드에 중단 점을 놓고 도달했는지 확인합니다.
Darin Dimitrov

1
웹 메서드의 중단 점이 적중되지 않습니다. Firebug는 System.Web.Script.Serialization에서 "Message": "Invalid JSON primitive : jewellerId.", "StackTrace": "를 표시합니다. 따라서 json의 구문이 잘못된 것 같습니다
ChrisCa

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

1
이것은 작동했습니다 : '{ "jewellerId":'+ filter + ', "locale": "en"}', (분명히 나는 ​​로케일을 en으로 하드 코딩하지 않을 것이지만 이것이 작동하는 구문입니다.
ChrisCa

이것은 MVC 3에서 저에게 효과적이었습니다. 저는 Darin의 방식을 얻을 수 없었습니다. 아마도 MVC 3 일 것입니다.
피아트

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서버 측 에서 속성을 읽는 웹 메서드 서명은 어떻게 생겼 습니까?
플로

5

아래 방법을 사용하여 ajax 호출을 사용하여 데이터를 보내지 마십시오.

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

실수로 사용자가 작은 따옴표 또는 큰 따옴표와 같은 특수 문자를 입력하면 잘못된 문자열로 인해 ajax 호출이 실패합니다.

아래 방법을 사용하여 문제없이 웹 서비스를 호출하십시오.

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


data: JSON.stringify(parameter)

위의 매개 변수는 자바 스크립트 객체의 이름이며이를 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

또는 배열을 사용하여 jason.stringyfy (array)에서 데이터를 전달할 수 있습니다.
Shekhar Patel

1

[이 줄은 Asp.net에서 완벽하게 작동하며 jason에서 웹 제어 필드를 찾습니다. 예 : <% 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

전달하는 데이터에 관한 모든 것; 올바른 형식의 문자열이어야합니다. 빈 데이터를 전달하는 경우 데이터 : {}이 작동합니다. 그러나 여러 매개 변수를 사용하려면 적절한 형식을 지정해야합니다.

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

....

데이터 : dataParam

...

이해하는 가장 좋은 방법은 자세한 오류를 알 수 있도록 적절한 메시지 매개 변수가있는 오류 처리기를 사용하는 것입니다.


0

json을 사용하여 여러 매개 변수를 성공적으로 전달했습니다.

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

전에 '정리'하지 않고 사용자 데이터를 매개 변수에 전달하지 마십시오.
fcm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.