$ ajax POST에서 매개 변수를 전달하는 방법은 무엇입니까?


135

링크에 명시된대로 튜토리얼을 따랐습니다 . 어떤 이유로 든 아래 코드에서 데이터가 매개 변수로 URL에 추가되지 않지만 사용하여 URL에 직접 설정 /?field1="hello"하면 작동합니다.

$.ajax({
        url: 'superman',
        type: 'POST',
        data: { field1: "hello", field2 : "hello2"} ,
        contentType: 'application/json; charset=utf-8',
        success: function (response) {
            alert(response.status);
        },
        error: function () {
            alert("error");
        }
    }); 

8
URL에 매개 변수를 추가하려는 경우 유형을 'GET'으로 변경해야합니다. 'POST'는 대신 HTTP 헤더의 매개 변수를 전달합니다.
rob

답변:


126

간단한 경우에 jQuery의 구문 $.post또는 $.get구문을 사용하는 것이 좋습니다 .

$.post('superman', { field1: "hello", field2 : "hello2"}, 
    function(returnedData){
         console.log(returnedData);
});

실패 사례를 포착해야하는 경우 다음을 수행하십시오.

$.post('superman', { field1: "hello", field2 : "hello2"}, 
    function(returnedData){
         console.log(returnedData);
}).fail(function(){
      console.log("error");
});

또한 항상 JSON 문자열을 보내면 맨 끝에 하나 이상의 매개 변수와 함께 $ .getJSON 또는 $ .post를 사용할 수 있습니다 .

$.post('superman', { field1: "hello", field2 : "hello2"}, 
     function(returnedData){
        console.log(returnedData);
}, 'json');

1
최신 버전의 jQuery는 $ .post 및 $ .get에서 done (), fail () 또는 always () 핸들러를 '매달려'지원합니다. 참조 : api.jquery.com/jQuery.post
CyberMonk

무엇 field1:이며 무엇 "hello"입니까? JS 또는 PHP의 변수?
MTBthePRO

field1 및 field2는 POST 변수입니다. Hello와 Hello2가 그 가치입니다.
Alvaro

57

GET 방법을 사용해보십시오.

var request = $.ajax({
    url: 'url',
    type: 'GET',
    data: { field1: "hello", field2 : "hello2"} ,
    contentType: 'application/json; charset=utf-8'
});

request.done(function(data) {
      // your success code here
});

request.fail(function(jqXHR, textStatus) {
      // your failure code here
});

POST 메소드가있는 URL에서 매개 변수를 볼 수 없습니다.

편집하다:

지원 중단 공지 : jqXHR.success (), jqXHR.error () 및 jqXHR.complete () 콜백은 jQuery 3.0부터 제거되었습니다. 대신 jqXHR.done (), jqXHR.fail () 및 jqXHR.always ()를 사용할 수 있습니다.


53

Jquery.ajax 는 POST 데이터를 GET 데이터에 대해 자동으로 인코딩하지 않습니다. Jquery는 데이터가 요청 본문에 추가되어 유선을 통해 직접 전송되도록 사전 형식화 될 것으로 예상합니다.

해결책은 jQuery.param 함수 를 사용하여 POST 요청을 처리하는 대부분의 스크립트가 예상하는 쿼리 문자열을 작성하는 것입니다.

$.ajax({
    url: 'superman',
    type: 'POST',
    data: jQuery.param({ field1: "hello", field2 : "hello2"}) ,
    contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
    success: function (response) {
        alert(response.status);
    },
    error: function () {
        alert("error");
    }
}); 

이 경우 param메소드는 데이터를 다음과 같이 형식화합니다.

field1=hello&field2=hello2

Jquery.ajax의 문서라는 플래그가 있다고 processData이 인코딩이 자동 여부 수행 여부를 그 컨트롤. 설명서에는 기본값이이라고 표시되어 true있지만 이것이 POST사용될 때 관찰되는 동작은 아닙니다 .


7
이것이 '왜'를 설명하는 유일한 대답이라고 생각합니다.
zhouji

15
    function FillData() {
    var param = $("#<%= TextBox1.ClientID %>").val();
    $("#tbDetails").append("<img src='Images/loading.gif'/>");
    $.ajax({
        type: "POST",/*method type*/
        contentType: "application/json; charset=utf-8",
        url: "Default.aspx/BindDatatable",/*Target function that will be return result*/
        data: '{"data":"' + param + '"}',/*parameter pass data is parameter name param is value */
        dataType: "json",
        success: function(data) {
               alert("Success");
            }
        },
        error: function(result) {
            alert("Error");
        }
    });   
}

11

A의 POST 요청 , 매개 변수는 사용자가 URL에 그들을 볼 수없는 이유 요청 본문에 전송됩니다.

당신이 그들을보고 싶다면, 변경

    type: 'POST',

    type: 'GET',

브라우저에는 코드로 발생하는 전체 요청을 볼 수있는 개발 도구가 있습니다. Chrome에서는 '네트워크'패널에 있습니다.


8
$.ajax(
   {
      type: 'post',
      url: 'superman',
      data: { 
        "field1": "hello",
        "field2": "hello1"
      },
      success: function (response) {
        alert("Success !!");
      },
      error: function () {
        alert("Error !!");
      }
   }
);

type: 'POST'URL에 표시되지 않는 ** 요청의 본문에 ** 파라미터 를 추가 하고 , 보이는 URL에 매개 변수를 추가 합니다.type: 'GET'

가장 많이 사용되는 웹 브라우저에는 완전한 요청 을 표시하는 네트워크 패널이 있습니다.

네트워크 패널에서 XHR 을 선택 하여 요청 을보십시오 .

이 작업을 통해 수행 할 수도 있습니다.

$.post('superman',
      { 
        'field1': 'hello', 
        'field2': 'hello1'
      },
      function (response) {
        alert("Success !");
      }
    );

6

$ .ajax 또는 $ .post를 사용하여 할 수 있습니다

$ .ajax 사용 :

    $.ajax({
      type: 'post',
      url: 'superman',
      data: { 
        'field1': 'hello', 
        'field2': 'hello1'
      },
      success: function (response) {
        alert(response.status);
      },
      error: function () {
        alert("error");
      }
   });

$ .post 사용 :

    $.post('superman',
      { 
        'field1': 'hello', 
        'field2': 'hello1'
      },
      function (response, status) {
        alert(response.status);
      }
    );

대단히 감사합니다-작동합니다. 그럼에도 불구하고 포스트 매개 변수를 얻기 위해 함수를 호출하는 예제를 추가 할 수 있다면 좋을 것입니다. 감사! :)
gies0r

3

JSON 키를 문자열로 전달하지 않는 한 코드가 옳았습니다.

주위에 큰 따옴표 나 작은 따옴표가 있어야합니다.

{ "field1": "hello", "field2": "hello2"}

$.ajax(
   {
      type: 'post',
      url: 'superman',
      data: { 
        "field1": "hello", // Quotes were missing
        "field2": "hello1" // Here also
      },
      success: function (response) {
        alert(response);
      },
      error: function () {
        alert("error");
      }
   }
);

0

POST메소드의 url에 매개 변수를 보내 려면 다음과 같이 url에 간단히 추가 할 수 있습니다.

$.ajax({
    type: 'POST',
    url: 'superman?' + jQuery.param({ f1: "hello1", f2 : "hello2"}),
    // ...
}); 

2
질문자가 POST를 통해 일부 매개 변수를 보내려면 다른 표준이 더 적합하므로 다른 답변이 더 적합합니다. 이 질문에는 POST 및 URL 매개 변수가 명시 적으로 언급되어 있습니다. (예를 들어 본문의 URL 매개 변수와 함께 URL 매개 변수를 설정해야하기 때문에이 질문을 찾았으며 문자열을 연결하는 것보다 더 좋은 방법으로 수행하고 싶습니다.) @ user4127이 답변을 수락하거나 질문을 재구성하십시오.
Jan Molnar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.