2012-10-10 57 views
49

Curioso si alguien sabe cuál es la diferencia con respecto al parámetro de datos.

Tengo un método $.post que toma un $('#myform').serialize() como parámetro de datos y funciona.

Si trato de la misma utilizando el enfoque $.ajax(), que no funciona como mi parámetro de datos no parece correcto.

¿Alguien sabe la diferencia y lo que podría utilizar en lugar de lo anterior .serialize?

+1

similar http://stackoverflow.com/questions/7528757/post-vs-ajax – Techie

+4

RTFM - http://api.jquery.com/jQuery.post/ –

Respuesta

14

Después de volver a leer algunos documentos en línea, decidí seguir con $ .post sobre $ .ajax.

parámetro de datos del método $ .ajax hace algo diferente que el método $ .post hace, no está seguro de qué es exactamente, pero hay una diferencia.

La única razón por la que quería usar $ .ajax es porque quería poder manejar los eventos y no sabía que podía hacerlo con $ .post.

Esto es lo que terminó con

function GetSearchItems() { 
    var url = '@Url.Action("GetShopSearchResults", "Shop", New With {.area = "Shop"})'; 
    var data = $("#ShopPane").serialize(); 
    // Clear container 
    $('#shopResultsContainer').html(''); 
    // Retrieve data from action method 
    var jqxhr = $.post(url, data); 
    // Handle results 
    jqxhr.success(function (result) { 
     //alert("ajax success"); 
     $('#shopResultsContainer').html(result.ViewMarkup); 
    }); 
    jqxhr.error(function() { 
     //alert("ajax error"); 
    }); 
    jqxhr.complete(function() { 
     //alert("ajax complete"); 
    }); 

    // Show results container 
    $("#shopResultsContainer").slideDown('slow'); 
} 
56

Esta publicación será útil para usted.

Forum Link

En resumen siguiente:

$.post("/ajax", {"data" : json }) 

es equivalente a:

$.ajax({ 
    type: "POST", 
    url: "/ajax", 
    data: {"data": json} 
}); 
42

El problema aquí no es el hecho de $.ajax() no funciona, es porque no partían el parámetro de tipo en la solicitud Ajax y por defecto es una solicitud GET. Los datos se envían a través de la cadena de consulta para obtener y si su servidor los espera como parámetros de publicación, no los leerá.

$.post es sólo una llamada con $.ajax(), sólo con el conjunto type. Lea docs y verá que $.ajax() tiene un GET predeterminado como mencioné anteriormente.

Si vas a la página jQuery.post en la documentación de jQuery le muestra la solicitud de $ .ajax con el conjunto tipo. De nuevo lea los documentos.

10

¿Está especificando esto como el parámetro de datos. $.post es solo una abreviatura de $.ajax que espera lo siguiente.

$.ajax({ 
    type : 'POST', 
    url : url, 
    data : data, 
    success : success, 
    dataType : dataType 
}); 
-3

En $.ajax que son capaces de sincronizar, pero no es posible en la función $.post. Para sincronizar significa que puede obtener el resultado devuelto.

var tmp; 
$.ajax({ 
    'async': false, 
    'type': "POST", 
    'global': false, 
    'dataType': 'html', 
    'url': "Your Url", 
    'data': {'type': 'data'}, 
    'success': function (data) { 
     tmp = data; 
    } 
}); 
alert(tmp); 
+4

Eso no es cierto. Puede obtener un resultado devuelto a través de: ' $ .post ("su.php", función (datos) {_referencia ** datos ** como su resultado devuelto_}) ' – blurgoon

+0

na gaking, esta es información absolutamente incorrecta y no debería tener ningún voto positivo. $ .ajax, $ .post y $ .get pueden TODOS devolver resultados. –

+0

@EdDeGagne No puede obtener la respuesta de devolución fuera de la función de publicación – nagaking

2

Así como una complementaria, en la respuesta aceptada, que se ve mencionado que "parámetro de datos del método $ .ajax hace algo diferente que el $.método post hace, no está seguro de qué es exactamente, pero hay una diferencia "

favor trate de usar:.

{ 
     ... 
     data: JSON.stringify(yourJsonData), 
     ... 
    } 

lo contrario el JSON objeto de conseguir insertada en la carga útil como una cadena con codificación URL