web-dev-qa-db-fra.com

Différence entre $ .post et $ .ajax?

Curieux si quelqu'un sait quelle est la différence en ce qui concerne le paramètre de données.

J'ai une méthode $.post Qui prend une $('#myform').serialize() comme paramètre de données et fonctionne.

Si j'essaye la même chose en utilisant l'approche $.ajax(), cela ne fonctionne pas car mes paramètres de données ne semblent pas corrects.

Est-ce que quelqu'un connaît la différence et ce que je pourrais utiliser au lieu des .serialize Ci-dessus?

58
Ed DeGagne

Après avoir relu la documentation en ligne, j'ai décidé de m'en tenir à $ .post plutôt qu'à $ .ajax.

Le paramètre de données de la méthode $ .ajax fait quelque chose de différent de la méthode $ .post, ne sait pas exactement quoi, mais il y a une différence.

La seule raison pour laquelle je voulais utiliser $ .ajax, c'est parce que je voulais être capable de gérer les événements et je ne savais pas que je pouvais le faire avec $ .post.

Voici ce que j'ai fini avec

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');
}

JQuery 3.x

Les méthodes de rappel jqXHR.success (), jqXHR.error () et jqXHR.complete () sont supprimées à partir de jQuery 3.0. Vous pouvez utiliser jqXHR.done (), jqXHR.fail () et jqXHR.always () à la place.

var jqxhr = $.post(url, data);
// Handle results
jqxhr.done(function(result) {
    //alert("ajax success");
});
jqxhr.fail(function() {
    //alert("ajax error");
});
jqxhr.always(function() {
    //alert("ajax complete");
});

https://api.jquery.com/jquery.post/

18
Ed DeGagne

Ce message vous sera utile.

Lien Forum

En bref:

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

Est équivalent à :

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

Le problème ici n'est pas le fait que $.ajax() ne fonctionne pas, c'est parce que vous n'avez pas défini le paramètre type dans la demande Ajax et qu'il s'agit par défaut d'une demande GET. Les données sont envoyées via la chaîne de requête pour get et si votre serveur les attend comme paramètres de publication, il ne les lira pas.

$.post Est juste un appel avec $.ajax(), juste avec l'ensemble type. Lisez le docs et vous verrez que $.ajax() par défaut à un GET comme je l'ai mentionné ci-dessus.

Si vous allez à la page jQuery.post dans les documents jQuery, il vous montre la demande $ .ajax avec le type défini. Lisez à nouveau les documents.

45
epascarello

Spécifiez-vous cela comme paramètre de données. $.post n'est qu'un raccourci pour $.ajax qui attend ce qui suit.

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

Juste comme complément, dans la réponse acceptée, il est mentionné que "Le paramètre de données de la méthode $ .ajax fait quelque chose de différent de la méthode $ .post, je ne sais pas exactement quoi, mais il y a une différence "

veuillez essayer d'utiliser:

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

Sinon, l'objet json get est inséré dans la charge utile en tant que chaîne codée en url.

2
spilote