Pregunta

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

por ejemplo. Students/getstud/1 donde se aplica controlador de formato / acción / parámetro.

Ahora tengo una acción de controlador de estudiantes que acepta dos parámetros y devolver un objeto JSON.

Entonces, ¿cómo puedo enviar datos con $.getJSON() utilizando el método de entrada?

métodos similares también son aceptables.

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

¿Fue útil?

Solución

El método .getJSON $ () hace un HTTP GET y POST no. Es necesario utilizar $ .post ()

$.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 cualquier cosa que desee, aunque si se envía el contenido de un formulario de una página HTML, puede utilizar el serializar método para crear los datos para el puesto de su formulario.

var dataToBeSent = $("form").serialize();

Otros consejos

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

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

Con el fin de utilizar jsonp, y el método POST, esta función añade el parámetro GET "devolución de llamada" a la URL. Esta es la manera de utilizarlo:

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

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

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

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

En la ejecución de PHP sería como:

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

He hecho algunas pruebas entre dominios y parece que funciona. Todavía necesita más pruebas sin embargo.

Sólo tiene que añadir estas líneas a su <script> (en algún lugar después de cargar jQuery pero antes de publicar cualquier cosa):

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

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

Puede utilizar las mismas funciones de devolución de llamada de Javascript como con $.getJSON. No se necesita ningún cambio de servidor. (Bueno, yo 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.

tuve código que estaba haciendo getJSON. Simplemente lo reemplazó con el poste. 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
    } 

acabo de utilizar correos 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!");
    });

$.getJSON() es bastante útil para el envío de una petición AJAX y volver datos JSON como respuesta. Por desgracia, la documentación de jQuery carece de una función hermana que debe ser nombrado $.postJSON(). ¿Por qué no sólo tiene que utilizar $.getJSON() y hacer con ella? Bueno, tal vez desee enviar una gran cantidad de datos o, en mi caso, IE7 sólo que no quiere trabajar correctamente con una petición GET.

Es cierto, no hay actualmente ningún método $.postJSON(), pero se puede obtener el mismo resultado especificando un cuarto parámetro (tipo) en la función $.post():

Mi código se veía así:

$.post('script.php', data, function(response) {
  // Do something with the request
}, 'json');

Si usted tiene sólo dos parámetros se puede hacer esto:

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

    //do something useful with returned result//
    result.variable-in-result;
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top