Как использовать getJSON, отправляя данные с помощью метода post?
Я использую вышеуказанный метод, и он хорошо работает с одним параметром в URL.
например Students/getstud/1 где применяется формат контроллера / действия / параметра.
теперь у меня есть действие в контроллере Students, которое принимает два параметра и возвращает объект JSON.
Так как я могу разместить данные с $.getJSON() С помощью метода post?
подобные методы также приемлемы.
дело в том, чтобы вызвать действие контроллера с помощью AJAX.
7 ответов:
долларов.метод 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-формы, вы можете использовать сериализовать метод для создания данных для записи из вашей формы.var dataToBeSent = $("form").serialize();
Это мое "одно решение":
$.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 " является обратным вызовом получить значение.
в PHP реализация будет выглядеть так:
print_r($_GET['callback']."(".json_encode($myarr).");");Я сделал несколько междоменные тесты, и это, кажется, работает. Все еще нужно больше тестирования, хотя.
просто добавьте эти строки в свой
<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.
У меня был код, который делал 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 }
Я просто использовал post и 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!"); });
$.getJSON()довольно удобно для отправки запроса AJAX и получения данных JSON в качестве ответа. Увы, в документации jQuery отсутствует сестринская функция, которая должна быть названа$.postJSON(). Почему бы просто не использовать$.getJSON()и покончим с этим? Ну, возможно, вы хотите отправить большой объем данных или, в моем случае, IE7 просто не хочет работать должным образом с запросом GET.правда, в настоящее время нет
$.postJSON()метод, но вы можете сделать то же самое, указав четвертый параметр (тип) в$.post()функция:мой код выглядел так:
$.post('script.php', data, function(response) { // Do something with the request }, 'json');
если у вас есть только два параметра, можно сделать так:
$.getJSON('/url-you-are-posting-to',data,function(result){ //do something useful with returned result// result.variable-in-result; });
Comments