Как использовать getJSON, отправляя данные методом post? - PullRequest
102 голосов
/ 15 апреля 2009

Я использую вышеуказанный метод, и он хорошо работает с одним параметром в URL.

например. Students/getstud/1, где применяется формат контроллера / действия / параметра.

Теперь у меня есть действие в контроллере Student, которое принимает два параметра и возвращает объект JSON.

Итак, как мне разместить данные с $.getJSON(), используя метод post?

Подобные методы также приемлемы.

Смысл в том, чтобы вызвать действие контроллера с AJAX.

Ответы [ 7 ]

209 голосов
/ 15 апреля 2009

Метод $ .getJSON () выполняет HTTP GET, а не POST. Вам нужно использовать $. 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();
13 голосов
/ 29 сентября 2010

Это мое «однострочное» решение:

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

Чтобы использовать метод jsonp и POST, эта функция добавляет параметр GET «callback» в 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).");");

Я сделал несколько междоменных тестов, и это похоже на работу. Все еще нужно больше тестирования, хотя.

5 голосов
/ 15 марта 2015

Просто добавьте эти строки в ваш <script> (где-то после загрузки jQuery, но перед публикацией чего-либо):

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

Замените (некоторые / все) $.getJSON на $.postJSON и наслаждайтесь!

Вы можете использовать те же функции обратного вызова Javascript, что и в $.getJSON. Никаких изменений на стороне сервера не требуется. (Ну, я всегда рекомендую использовать $_REQUEST в PHP. http://php.net/manual/en/reserved.variables.request.php, Среди $ _REQUEST, $ _GET и $ _POST, какой из них самый быстрый? )

Это проще, чем решение @ lepe.

3 голосов
/ 27 сентября 2013

У меня был код, который делал 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
    } 
2 голосов
/ 16 ноября 2016

Я только что использовал сообщение и 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 голос
/ 05 сентября 2014

$.getJSON() очень удобно для отправки запроса AJAX и получения данных JSON в ответ. Увы, в документации jQuery отсутствует родственная функция, которая должна называться $.postJSON(). Почему бы просто не использовать $.getJSON() и покончить с этим? Что ж, возможно, вы хотите отправить большой объем данных или, в моем случае, IE7 просто не хочет правильно работать с GET-запросом.

Это правда, в настоящее время нет метода $.postJSON(), но вы можете сделать то же самое, указав четвертый параметр (тип) в функции $.post():

Мой код выглядел так:

$.post('script.php', data, function(response) {
  // Do something with the request
}, 'json');
0 голосов
/ 20 июля 2010

если у вас есть только два параметра, вы можете сделать это:

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

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