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.

Foi útil?

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;
});
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top