getJSON을 사용하여 post 메소드로 데이터를 보내는 방법은 무엇입니까?


107

위의 방법을 사용하고 있으며 URL에서 하나의 매개 변수로 잘 작동합니다.

예 : Students/getstud/1컨트롤러 / 액션 / 파라미터 형식이 적용되는 경우.

이제 두 개의 매개 변수를 받아들이고 JSON 객체를 반환하는 학생 컨트롤러의 작업이 있습니다.

그렇다면 $.getJSON()게시 방법 을 사용하여 데이터를 게시하려면 어떻게해야 합니까?

유사한 방법도 허용됩니다.

요점은 AJAX로 컨트롤러의 동작을 호출하는 것입니다.


4
get에서 getJSON수단 GET 사용하는 일부 JSON을 얻을 수 있습니다.
Majid Fouladpour

1
@Majid Fouladpour 내가이 질문을했을 때 나는 그것을 몰랐다 ..!
Vikas

답변:


216

$ .getJSON () 메서드는 POST가 아닌 HTTP GET을 수행합니다. $ .post () 를 사용해야합니다.

$.post(url, dataToBeSent, function(data, textStatus) {
  //data contains the JSON object
  //textStatus contains the status: success, error, etc
}, "json");

이 호출에서 dataToBeSent원하는 것은 무엇이든 될 수 있지만 html 양식의 내용을 보내는 경우 serialize 메서드를 사용하여 양식에서 POST 용 데이터를 만들 수 있습니다 .

var dataToBeSent = $("form").serialize();

7
불행히도 $ .getJSON 지원 Jsonp (교차 도메인 액세스)를 추가하고 싶습니다.
Tomas

2
실제로 .getJSON ()은 두 가지 방법으로 도메인 간 액세스를 지원합니다. GET 또는 POST를 사용하지 않고 스크립트 삽입을 사용하는 JSONP; 뿐만 아니라 CORS-및 .post ()도 CORS를 지원합니다. 그러나 CORS는 서버도 지원해야하지만 JSONP는 지원하지 않습니다.
hippietrail

2
사실이 아닙니다. JSONP는 콜백 매개 변수를 구문 분석하기위한 서버 지원도 필요합니다.
Shrulik 2013 년

위의 함수를 사용할 때 json 객체 대신 문자열 객체를받습니다.
Pratik Singhal

13

이것은 내 "한 줄"솔루션입니다.

$.postJSON = function(url, data, func) { $.post(url+(url.indexOf("?") == -1 ? "?" : "&")+"callback=?", data, func, "json"); }

jsonp 및 POST 메소드를 사용하기 위해이 함수는 "콜백"GET 매개 변수를 URL에 추가합니다. 다음은 사용 방법입니다.

$.postJSON("http://example.com/json.php",{ id : 287 }, function (data) {
   console.log(data.name);
});

서버는 콜백 GET 매개 변수를 처리하고 json 문자열을 다음과 같이 반환 할 준비가되어 있어야합니다.

jsonp000000 ({"name":"John", "age": 25});

여기서 "jsonp000000"은 콜백 GET 값입니다.

PHP에서 구현은 다음과 같습니다.

print_r($_GET['callback']."(".json_encode($myarr).");");

교차 도메인 테스트를 수행했는데 작동하는 것 같습니다. 그래도 더 많은 테스트가 필요합니다.


1
이것은 POST 최대 크기를 재정의 할 수있는 동안 GET 제한을 우회하지 않습니다.
Dementic

추가 한 이유는 무엇 ?callback입니까? URL에서? 그로 인해 콜백이 호출되지 않았습니다. 나는 또한 JSON.stringify(data). +1, 유용한 소식!
Ionică Bizău 2014

@ IonicăBizău : 감사합니다. 객체를 반환하려면 URL에 "콜백"매개 변수를 추가해야하며 서버는 JQuery에서 생성 한 동일한 객체 이름을 반환해야합니다. 또한 getJSON ()에 대한 재정의 함수를 사용합니다.jQuery.getJSON = function(url, data, func) { return $.get(url+(url.indexOf("?") == -1 ? "?" : "&")+"callback=?", data, func, "json"); }
lepe

7

다음 줄을 추가하십시오 <script>(jQuery가로드 된 후 아무 데나 게시하기 전에) :

$.postJSON = function(url, data, func)
{
    $.post(url, data, func, 'json');
}

(일부 / 전체) 교체 $.getJSON와를 $.postJSON즐기십시오!

에서와 동일한 Javascript 콜백 함수를 사용할 수 있습니다 $.getJSON. 서버 측 변경이 필요하지 않습니다. (음, 항상 $_REQUESTPHP에서 사용 하는 것이 좋습니다 . http://php.net/manual/en/reserved.variables.request.php , $ _REQUEST, $ _GET 및 $ _POST 중 어느 것이 가장 빠릅니까? )

이것은 @lepe의 솔루션보다 간단합니다.


일반적으로 getJSON에 적용 할 수있는 done () 및 fail () 메서드에서는 작동하지 않았습니다.
HackWeight dec.

3

getJSON을 수행하는 코드가 있습니다. 나는 단순히 그것을 포스트로 대체했습니다. 놀랍게도 작동했습니다.

   $.post("@Url.Action("Command")", { id: id, xml: xml })
      .done(function (response) {
           // stuff
        })
        .fail(function (jqxhr, textStatus, error) {
           // stuff
        });



    [HttpPost]
    public JsonResult Command(int id, string xml)
    {
          // stuff
    } 

3

방금 게시물과 if를 사용했습니다.

data = getDataObjectByForm(form);
var jqxhr = $.post(url, data, function(){}, 'json')
    .done(function (response) {
        if (response instanceof Object)
            var json = response;
        else
            var json = $.parseJSON(response);
        // console.log(response);
        // console.log(json);
        jsonToDom(json);
        if (json.reload != undefined && json.reload)
            location.reload();
        $("body").delay(1000).css("cursor", "default");
    })
    .fail(function (jqxhr, textStatus, error) {
        var err = textStatus + ", " + error;
        console.log("Request Failed: " + err);
        alert("Fehler!");
    });

1

$.getJSON()AJAX 요청을 보내고 응답으로 JSON 데이터를 다시 가져 오는 데 매우 편리합니다. 아아, jQuery 문서에는 이름을 지정해야하는 자매 함수가 없습니다 $.postJSON(). 왜 그것을 사용 $.getJSON()하고 끝내지 않습니까? 글쎄, 아마도 당신은 많은 양의 데이터를 보내고 싶거나, 제 경우에는 IE7이 GET 요청으로 제대로 작동하지 않기를 원할 것입니다.

사실입니다. 현재 $.postJSON()메소드는 없지만 $.post()함수 에 네 번째 매개 변수 (유형)를 지정하여 동일한 작업을 수행 할 수 있습니다 .

내 코드는 다음과 같습니다.

$.post('script.php', data, function(response) {
  // Do something with the request
}, 'json');

-8

두 개의 매개 변수 만있는 경우 다음을 수행 할 수 있습니다.

$.getJSON('/url-you-are-posting-to',data,function(result){

    //do something useful with returned result//
    result.variable-in-result;
});

5
나는 이것이 질문에 대한 대답이 아니라고 생각합니다.
하 미트 싱
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.