JQuery supprime des tableaux vides lors de l'envoi
J'ai le code suivant:
$.post('block_ajax.php'
, { 'action': 'set_layout'
, 'listid': 123
, 'layout': []
}
, function(data) {
//...
}
);
La réception de script (block_ajax.php) uniquement reçoit le "action" et "listid" paramètres". Quand j'ai inspecter ce qui est envoyé à l'aide de Chrome, je vois la "mise en page" paramètre n'est même pas envoyer à l'arrière-plan de script.
Car il ya une différence entre un tableau vide et de l'absence d'un tableau, j'aimerais avoir JQuery envoyer le tableau vide. Je peux y trouver des indications que JQuery (1.6.1) semble le faire, mais pas comment arrêter de le faire. Format JSON permet de vider des tableaux et des objets vides, donc je pense que ça devrait être possible.
Quelqu'un sait ce qu'changement de JQuery pouvez envoyer des tableaux vides?
layout: true
.essayez
"[]"
. Devrait faire l'affaireOriginalL'auteur Martijn van der Lee | 2011-07-08
Vous devez vous connecter pour publier un commentaire.
EDIT: Voir la réponse de Luc pour une meilleure solution: https://stackoverflow.com/a/31996181/827437
J'ai quitté ma précédente réponse spécifique à la façon dont les Rails poignées
[""]
ci-dessous, le lien ci-dessus explique.Remarque: les Rails spécifiques
Je ne suis pas sûr de savoir pourquoi vous avez besoin d'envoyer un paramètre vide. Simplement de la vérification de l'existence du paramètre dans le script PHP doit être suffisant. Toutefois, si vous voulez vraiment le faire, utilisez
'layout': [""]
au lieu de'layout': []
. Le paramètre doit être envoyé.(En plus, vous pouvez renommer
layout
àlayout[]
pour indiquer que c'est un tableau, mais ce n'est pas nécessaire.)Considère que j'ai la liste
items
utilisateur supprime dans un modèle complexe. Normalement je mettre à jour uniquement les champs modifiés. Si je n'obtiens pas de param à tous, le champ ne sera pas mis à jour et la liste de l'article ne sera pas mis à jour, mais tous les éléments doivent être supprimés lorsque j'ai misitems = array()
droit? Ou mêmeitems = null
, mais sans (post/get) info modèle n'est pas au courant si il doit encore toucheritems
champ!PeterM avez-vous trouvé une solution à cela? Je suis en train de vivre exactement ce que vous avez déclaré. Si le tableau vide est envoyé je veux supprimer tous les éléments, si un tableau contient des éléments que je veux ajouter ceux qui ne sont pas déjà là, et de supprimer ceux qui ne devraient plus être là. Enfin, rien ou null doit passer le chèque.
Vide les paramètres sont beaucoup utilisés, par exemple, nous avons une liste de favoris sur une page, cette liste utilise le même effet que le général entititieslist, avec l'ajout qu'il envoie le long d'un "filtre" de l'ID qui est utilisé comme searchparam dans notre Solr. Envoi PAS de liste, est égale à aucune des filtres, est égale à la récupération de TOUTES les entités, une liste vide cependant rendrait un résultat de 0 entités. Il y a grande différence entre " pas de liste et une liste vide, et donc pourquoi vous envoyons parfois des champs des paramètres.
Ce n'est pas une réponse -- maintenant, vous êtes à l'envoi d'un non-vide avec une fausse valeur qui va causer plus de backend de codage d'interpréter la situation. Si nous ne pouvons pas vraiment envoyer un tableau vide, alors qu'un simple test sur le dos de la présence du parm, qui probablement d'autres l'ont suggéré, est beaucoup plus propre pour faire face à l'ensemble de la question.
OriginalL'auteur vinod
Notre organisation dispose de deux approches du problème:
[""]
comme indiqué par vinod va bien travailler, comme de nombreux cadres (par exemple, les Rails) souvent traiter cela comme un tableau vide. (pour la raison, voir ce Débordement de Pile répondre).has_many
relation. E. g. si vous avez unfoos
table et unbars
table, etfoos
has_many :bars through :foo_bars
, un moyen de supprimer toutes les associations sur unfoo
objet est de passerfoo: { bar_ids: [""] }
.Les deux approches sont hackier que souhaité, et je serais heureux de découvrir un nettoyant approche.
['']
comme un tableau vide:[''].empty? # => false
[''].blank? # => false
Correct, dans le cas général, mais lorsqu'ils sont reçus qu'après les données, les Rails semble traiter
['']
comme un tableau vide. (E. g. dans l'exemple de ma note, Rails de ne pas créer une relation de mappage spécifiéfoo
àbar_id: ""
-- c'est juste supprime tous les foo/bar relations)Oh nvm, je viens de réaliser au sujet de votre remarque et, en fait, qui devrait s'appliquer seulement pour les listes d'identifiants. Dans mon cas, c'était un champ json et à cause de qui il a été enregistré dans la base comme un tableau avec une chaîne vide.
de bon sens! tout à fait raison. Merci!
OriginalL'auteur Luke Knepper
2018, Désolé de répondre à la vieille question, mais voici une meilleure réponse à mon humble avis:
Exemples:
En back-end, si c'est une chaîne vide ou chaîne séparée par des virgules, il sera toujours affichée, juste le convertir en tableau.
Back-end (PHP par exemple):
var arr=[{test:true}];
latoString()
méthode va sérialiser le tableau de[object Object]
OriginalL'auteur evilReiko
je pense que json aidera dans ce cas
encoder le tableau en js et envoyer le résultat décoder ensuite en php
mais cela va prendre un peu de ressources
OriginalL'auteur Robert
Essayez ceci:
pour obtenir un nouveau tableau vide si la pile est vide, le "vrai" tableau avec des données autrement.
Je sais thi est une très très vieille réponse, mais j'ai besoin de downvote ce qu'il ne répond pas à la question. Vous êtes simplement à la "fixation" des résultats de la bug, pas le bug lui-même. L'utilisateur ne veut pas d'un tableau vide si il n'est pas tout, l'utilisateur veut envoyer des tableaux vides. Il y a une énorme différence entre: Une liste est vide, B: Rien.
La chose même que l'OP voulait éviter d'avoir à le faire.
OriginalL'auteur Nikko Reyes