Cómo usar getJSON, enviando datos con el método post?


Estoy usando el método anterior y funciona bien con un parámetro en URL.

Por ejemplo, Students/getstud/1 donde se aplica el formato controlador/acción/parámetro.

Ahora tengo una acción en Students controller que acepta dos parámetros y devuelve un objeto JSON.

Entonces, ¿cómo puedo publicar datos con $.getJSON() usando el método post?

Métodos similares también son aceptables.

El punto es llamar una acción del controlador con AJAX.

Author: Benjamin, 2009-04-15

7 answers

El $.El método getJSON () hace un HTTP GET y no POST. Necesitas usar $.puesto()

$.post(url, dataToBeSent, function(data, textStatus) {
  //data contains the JSON object
  //textStatus contains the status: success, error, etc
}, "json");

En esa llamada, dataToBeSent podría ser lo que quieras, aunque si estás enviando el contenido de un formulario html, puedes usar el método serializar para crear los datos para el POST desde tu formulario.

var dataToBeSent = $("form").serialize();
 201
Author: Erv Walter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-15 12:05:37

Esta es mi solución de "una línea":

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

Para usar el método jsonp y POST, esta función agrega el parámetro GET "callback" a la URL. Esta es la forma de usarlo:

$.postJSON("http://example.com/json.php",{ id : 287 }, function (data) {
   console.log(data.name);
});

El servidor debe estar preparado para manejar el parámetro GET de devolución de llamada y devolver la cadena json como:

jsonp000000 ({"name":"John", "age": 25});

En el que "jsonp000000" es el valor GET de devolución de llamada.

En PHP la implementación sería como:

print_r($_GET['callback']."(".json_encode($myarr).");");

Hice algunas pruebas entre dominios y parece funcionar. Aun sin embargo, necesita más pruebas.

 13
Author: lepe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-07 07:32:43

Simplemente agregue estas líneas a su <script> (en algún lugar después de que se cargue jQuery pero antes de publicar nada):

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

Reemplazar (algunos / todos) $.getJSON con $.postJSON y disfrutar!

Puede usar las mismas funciones de devolución de llamada de Javascript que con $.getJSON. No se necesita ningún cambio del lado del servidor. (Bueno, siempre recomiendo usar $_REQUEST en PHP. http://php.net/manual/en/reserved.variables.request.php, Entre $_REQUEST, $_GET y?_POST ¿cuál es el más rápido?)

Esto es más simple que la solución de @lepe.

 5
Author: Lerin Sonberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:55:07

Tenía un código que estaba haciendo getJSON. Simplemente lo reemplazé con post. Para mi sorpresa, funcionó

   $.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
    } 
 3
Author: Stan Bashtavenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-27 14:38:06

Acabo de usar post y un 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!");
    });
 2
Author: Fusca Software,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-16 11:23:20

$.getJSON() es bastante útil para enviar una solicitud AJAX y recuperar datos JSON como respuesta. Por desgracia, la documentación de jQuery carece de una función hermana que debería llamarse $.postJSON(). ¿Por qué no usar $.getJSON() y terminar con él? Bueno, tal vez desee enviar una gran cantidad de datos o, en mi caso, IE7 simplemente no quiere funcionar correctamente con una solicitud GET.

Es cierto, actualmente no hay un método $.postJSON(), pero puede lograr lo mismo especificando un cuarto parámetro (tipo) en el $.post() función:

Mi código se veía así:

$.post('script.php', data, function(response) {
  // Do something with the request
}, 'json');
 1
Author: Tony,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-21 19:23:58

Si solo tienes dos parámetros puedes hacer esto:

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

    //do something useful with returned result//
    result.variable-in-result;
});
 -8
Author: mic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-01 01:26:07