Como usar getJSON, o envio de dados com o método de pós?
-
09-09-2019 - |
Pergunta
Eu estou usando acima método e ele funciona bem com um parâmetro na URL.
por exemplo. Students/getstud/1
onde controller / action formato / parâmetro é aplicada.
Agora eu tenho uma ação no controlador de estudantes que aceita dois parâmetros e retornar um objeto JSON.
Então, como faço para postar dados com $.getJSON()
usando método post?
métodos semelhantes também são aceitáveis.
O ponto é para chamar uma ação do controlador com AJAX.
Solução
O método $ .getJSON () faz um HTTP GET e não POST. Você precisa usar $ .post ()
$.post(url, dataToBeSent, function(data, textStatus) {
//data contains the JSON object
//textStatus contains the status: success, error, etc
}, "json");
Nesse chamada, dataToBeSent
poderia ser o que quiser, mas se está enviando o conteúdo de um formulário HTML, você pode usar o serialize método para criar os dados para o cargo de seu formulário.
var dataToBeSent = $("form").serialize();
Outras dicas
Esta é a minha solução "one-line":
$.postJSON = function(url, data, func) { $.post(url+(url.indexOf("?") == -1 ? "?" : "&")+"callback=?", data, func, "json"); }
Para utilizar jsonp, eo método POST, essa função adiciona o "callback" GET parâmetro para o URL. Esta é a maneira de usá-lo:
$.postJSON("http://example.com/json.php",{ id : 287 }, function (data) {
console.log(data.name);
});
O servidor deve estar preparado para lidar com o retorno de chamada GET parâmetro e retornar a string JSON como:
jsonp000000 ({"name":"John", "age": 25});
em que "jsonp000000" é o valor de retorno de chamada GET.
No PHP a implementação seria como:
print_r($_GET['callback']."(".json_encode($myarr).");");
Eu fiz alguns testes de domínio cruzado e parece trabalho. Ainda precisa de mais testes embora.
Basta adicionar estas linhas ao seu <script>
(em algum lugar após jQuery é carregado mas antes de postar qualquer coisa):
$.postJSON = function(url, data, func)
{
$.post(url, data, func, 'json');
}
Substituir (alguns all /) $.getJSON
com $.postJSON
e divirta-se!
Você pode usar as mesmas funções de retorno de chamada de JavaScript como com $.getJSON
.
Nenhuma mudança do lado do servidor é necessária. (Bem, eu sempre recomendo usar $_REQUEST
em PHP. http://php.net /manual/en/reserved.variables.request.php , Entre $ _REQUEST , $ _GET e $ _POST qual deles é o mais rápido? )
Este é mais simples do que @ de Lepe solução.
Eu tive código que estava fazendo getJSON. Eu simplesmente substituiu-o com post. Para minha surpresa, ele trabalhou
$.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
}
Eu apenas usei post e um se:
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()
é muito útil para o envio de uma solicitação AJAX e voltar dados JSON como uma resposta. Infelizmente, a documentação do jQuery carece de uma função irmã que deve ser nomeado $.postJSON()
. Porque não usar $.getJSON()
e ser feito com ele? Bem, talvez você quiser enviar uma grande quantidade de dados ou, no meu caso, o IE7 simplesmente não querem trabalhar adequadamente com um pedido GET.
É verdade, não há atualmente nenhum método $.postJSON()
, mas você pode fazer a mesma coisa, especificando um quarto parâmetro (tipo) na função $.post()
:
Meu código ficou assim:
$.post('script.php', data, function(response) {
// Do something with the request
}, 'json');
Se você tem apenas dois parâmetros que você pode fazer isso:
$.getJSON('/url-you-are-posting-to',data,function(result){
//do something useful with returned result//
result.variable-in-result;
});