Как использовать getJSON, отправляя данные с помощью метода post?
Я использую метод выше, и он хорошо работает с одним параметром в URL.
например. Students/getstud/1
, где применяется формат контроллера/действия/параметра.
Теперь у меня есть действие в контроллере студентов, которое принимает два параметра и возвращает объект JSON.
Итак, как я могу отправить данные с помощью $.getJSON()
с помощью метода post?
Аналогичные методы также приемлемы.
Дело в том, чтобы вызвать действие контроллера с AJAX.
Ответы
Ответ 1
Метод $.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();
Ответ 2
Это мое однострочное решение:
$.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).");");
Я сделал несколько междоменных тестов и, похоже, работает. Тем не менее, нужно больше тестировать.
Ответ 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
}
Ответ 4
Просто добавьте эти строки в свой <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.
Ответ 5
$.getJSON()
очень удобен для отправки запроса AJAX и получения данных JSON в качестве ответа. Увы, в документации jQuery отсутствует сестра-функция, которая должна быть названа $.postJSON()
. Почему бы просто не использовать $.getJSON()
и сделать с ним? Ну, возможно, вы хотите отправить большой объем данных или, в моем случае, IE7 просто не хочет нормально работать с запросом GET.
Правда, в настоящее время нет метода $.postJSON()
, но вы можете сделать то же самое, указав четвертый параметр (тип) в функции $.post()
:
Мой код выглядел так:
$.post('script.php', data, function(response) {
// Do something with the request
}, 'json');
Ответ 6
Я просто использовал post и if 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!");
});
Ответ 7
если у вас есть только два параметра, вы можете сделать это:
$.getJSON('/url-you-are-posting-to',data,function(result){
//do something useful with returned result//
result.variable-in-result;
});
Ответ 8
Снова вы можете сделать это:
$.getJSON('/url-you-are-posting-to/'+param1+ '/'+ param2,null,function(result){
//do something useful with returned result//
result.variable-in-result; // result is json structure returned//
});
который может быть не таким элегантным