from - json jquery html
¿Cómo usar getJSON, enviar datos con el método de publicación? (7)
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 de controlador / acción / parámetro.
Ahora tengo una acción en el controlador de Estudiantes que acepta dos parámetros y devuelve un objeto JSON.
Entonces, ¿cómo puedo publicar datos con $.getJSON()
usando el método de publicación?
Los métodos similares también son aceptables.
El punto es llamar una acción del controlador con AJAX.
El método $ .getJSON () realiza un HTTP GET y no POST. Necesita usar $.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 lo que quieras, aunque si estás enviando el contenido de un formulario html, puedes usar el método de serialize para crear los datos para el POST desde tu formulario.
var dataToBeSent = $("form").serialize();
Esta es mi solución de "una sola línea":
$.postJSON = function(url, data, func) { $.post(url+(url.indexOf("?") == -1 ? "?" : "&")+"callback=?", data, func, "json"); }
Para utilizar jsonp y el método POST, esta función agrega el parámetro GET "de devolución de llamada" 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 de devolución de GET.
En PHP, la implementación sería como:
print_r($_GET[''callback'']."(".json_encode($myarr).");");
Hice algunas pruebas entre dominios y parece que funciona. Aún así, necesito más pruebas.
Simplemente agregue estas líneas a su <script>
(en algún lugar después de que se cargue jQuery pero antes de publicar algo):
$.postJSON = function(url, data, func)
{
$.post(url, data, func, ''json'');
}
Reemplace (algo / todo) $.getJSON
con $.postJSON
y ¡disfrútelo!
Puede usar las mismas funciones de devolución de llamada de Javascript que con $.getJSON
. No se necesita un cambio en el servidor. (Bueno, siempre recomiendo usar $_REQUEST
en PHP. $_REQUEST
, entre $ _REQUEST, $ _GET y $ _POST ¿cuál es el más rápido? )
Esto es más simple que la solución de @ lepe.
Solo uso post y an si:
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!");
});
Tenía un código que estaba haciendo getJSON. Simplemente lo reemplacé por una publicación. 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
}
si solo tiene dos parámetros, puede hacer esto:
$.getJSON(''/url-you-are-posting-to'',data,function(result){
//do something useful with returned result//
result.variable-in-result;
});
$.getJSON()
es bastante útil para enviar una solicitud AJAX y recuperar datos JSON como respuesta. Lamentablemente, la documentación de jQuery carece de una función hermana que debería llamarse $.postJSON()
. ¿Por qué no usar $.getJSON()
y terminar con esto? Bueno, quizás quiera enviar una gran cantidad de datos o, en mi caso, IE7 simplemente no quiere trabajar correctamente con una solicitud GET.
Es cierto, actualmente no $.postJSON()
método $.postJSON()
, pero puede lograr lo mismo 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'');