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?
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");
});
Ce message vous sera utile.
En bref:
$.post( "/ajax", {"data" : json })
Est équivalent à :
$.ajax({
type: "POST",
url: "/ajax",
data: {"data": json}
});
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.
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
});
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.