Page 1 sur 1

Ajax post invalid input

Posté : 19 nov. 2015, 12:58
par kodjo
Bonjour à tous,

J'essaye de passer des données de formulaire vers une url avec ajax

Code : Tout sélectionner

var formData = $('#adminForm').serialize(); $.post( "index.php?page=mapage", formData) .done(function( data ) { alert( "Data Loaded: " + data ); });
la ligne serialize() fonctionne bien, mais j'ai une erreur juste sur la fonction post:

Code : Tout sélectionner

Failed to load resource: the server responded with a status of 500 (Invalid input)
Pourtant, l'url de destination existe bien et renvoie (true) comme prévu lorsque je la teste via le navigateur.

Voici les données que je tente de poster à partir de la variable formData sérialisée:

Code : Tout sélectionner

jl_generate_for=test-categories-*&jl_menu=test&jl_link=0&jl_language=*&jl_access=1&jl_status=1&jl_flat=0&jl_template=7&jl_layout=blog&daterange=&jl_extra_menu_params%5B0%5D=&jl_items%5B%5D=1&jl_titles%5B1%5D=ROOT&jl_aliases%5B1%5D=root&jl_metakeys%5B1%5D=&jl_metadescs%5B1%5D=&jl_extra_menu_params%5B1%5D=&jl_items%5B%5D=9&jl_titles%5B9%5D=Uncategorised&jl_aliases%5B9%5D=uncategorised&jl_metakeys%5B9%5D=&jl_metadescs%5B9%5D=&jl_extra_menu_params%5B9%5D=&jl_items%5B%5D=14&jl_titles%5B14%5D=Sample+Data-Articles&jl_aliases%5B14%5D=sample-data-articles&jl_metakeys%5B14%5D=&jl_metadescs%5B14%5D=&jl_extra_menu_params%5B14%5D=&jl_items%5B%5D=19&jl_titles%5B19%5D=Joomla!&jl_aliases%5B19%5D=joomla&jl_metakeys%5B19%5D=&jl_metadescs%5B19%5D=&jl_extra_menu_params%5B19%5D=&jl_items%5B%5D=20&jl_titles%5B20%5D=Extensions&jl_aliases%5B20%5D=extensions&jl_metakeys%5B20%5D=&jl_metadescs%5B20%5D=&jl_extra_menu_params%5B20%5D=&jl_items%5B%5D=21&jl_titles%5B21%5D=Components&jl_aliases%5B21%5D=components&jl_metakeys%5B21%5D=&jl_metadescs%5B21%5D=&jl_extra_menu_params%5B21%5D=&jl_items%5B%5D=22&jl_titles%5B22%5D=Modules&jl_aliases%5B22%5D=modules&jl_metakeys%5B22%5D=&jl_metadescs%5B22%5D=&jl_extra_menu_params%5B22%5D=&jl_items%5B%5D=64&jl_titles%5B64%5D=Content+Modules&jl_aliases%5B64%5D=articles-modules&jl_metakeys%5B64%5D=&jl_metadescs%5B64%5D=&jl_extra_menu_params%5B64%5D=&jl_items%5B%5D=65&jl_titles%5B65%5D=User+Modules&jl_aliases%5B65%5D=user-modules&jl_metakeys%5B65%5D=&jl_metadescs%5B65%5D=&jl_extra_menu_params%5B65%5D=&jl_items%5B%5D=66&jl_titles%5B66%5D=Display+Modules&jl_aliases%5B66%5D=display-modules&jl_metakeys%5B66%5D=&jl_metadescs%5B66%5D=&jl_extra_menu_params%5B66%5D=&jl_items%5B%5D=67&jl_titles%5B67%5D=Utility+Modules&jl_aliases%5B67%5D=utility-modules&jl_metakeys%5B67%5D=&jl_metadescs%5B67%5D=&jl_extra_menu_params%5B67%5D=&jl_items%5B%5D=75&jl_titles%5B75%5D=Navigation+Modules&jl_aliases%5B75%5D=navigation-modules&jl_metakeys%5B75%5D=&jl_metadescs%5B75%5D=&jl_extra_menu_params%5B75%5D=&jl_items%5B%5D=23&jl_titles%5B23%5D=Templates&jl_aliases%5B23%5D=templates&jl_metakeys%5B23%5D=&jl_metadescs%5B23%5D=&jl_extra_menu_params%5B23%5D=&jl_items%5B%5D=68&jl_titles%5B68%5D=Atomic&jl_aliases%5B68%5D=atomic&jl_metakeys%5B68%5D=&jl_metadescs%5B68%5D=&jl_extra_menu_params%5B68%5D=&jl_items%5B%5D=69&jl_titles%5B69%5D=Beez+20&jl_aliases%5B69%5D=beez-20&jl_metakeys%5B69%5D=&jl_metadescs%5B69%5D=&jl_extra_menu_params%5B69%5D=&jl_items%5B%5D=70&jl_titles%5B70%5D=Beez+5&jl_aliases%5B70%5D=beez-5&jl_metakeys%5B70%5D=&jl_metadescs%5B70%5D=&jl_extra_menu_params%5B70%5D=&jl_items%5B%5D=24&jl_titles%5B24%5D=Languages&jl_aliases%5B24%5D=languages&jl_metakeys%5B24%5D=&jl_metadescs%5B24%5D=&jl_extra_menu_params%5B24%5D=&jl_items%5B%5D=25&jl_titles%5B25%5D=Plugins&jl_aliases%5B25%5D=plugins&jl_metakeys%5B25%5D=&jl_metadescs%5B25%5D=&jl_extra_menu_params%5B25%5D=&jl_items%5B%5D=29&jl_titles%5B29%5D=Fruit+Shop+Site&jl_aliases%5B29%5D=fruit-shop-site&jl_metakeys%5B29%5D=&jl_metadescs%5B29%5D=&jl_extra_menu_params%5B29%5D=&jl_items%5B%5D=30&jl_titles%5B30%5D=Growers&jl_aliases%5B30%5D=growers&jl_metakeys%5B30%5D=&jl_metadescs%5B30%5D=&jl_extra_menu_params%5B30%5D=&jl_items%5B%5D=76&jl_titles%5B76%5D=Recipes&jl_aliases%5B76%5D=recipes&jl_metakeys%5B76%5D=&jl_metadescs%5B76%5D=&jl_extra_menu_params%5B76%5D=&jl_action=categories&task=apply&182cbb2136866b36307ea8558ad047e1=1
Voyez-vous pourquoi le post ajax ne fonctionne pas?
En vous remerciant pour vos réponses.

Re: Ajax post invalid input

Posté : 19 nov. 2015, 13:23
par kodjo
j'ai tenté l'autre forme de requete ajax, avec la meme erreur:

Code : Tout sélectionner

$.ajax({ url: "index.php?page=mapage", data: formData, success: function(data) { alert( "Data Loaded: " + data ); } });

Re: Ajax post invalid input

Posté : 19 nov. 2015, 14:00
par kodjo
j'ai testé la chaine sérialisée ici:
http://blog.tanist.co.uk/files/unserialize/

la page me dit "Not a valid input!".
etant donné que la fonction serialize fait tout le travail, je me demande bien d'où ça peut venir.

J'ai également tenté de transformer le contenu du formulaire en array plutôt que string, et j'ai passé chaque paramètre au post en utilisant une boucle each:

Code : Tout sélectionner

var formData = jQuery('#adminForm').serializeArray(); $.each( formData, function( index, value ){ console.log(index + '=' + value); $.ajax({ url: "index.php?page=mapage", data: index + '=' + value, dataType: 'json', success: function(data) { //alert( "Data Loaded: " + data ); } }); });
Là ça fonctionne. Donc chaque paramètre passé isolément fonctionne, mais si je passe toute la chaine avec serialize(), il y a un pb. J'ai également tenté de passer toute la chaine avec .serializeArray() mais toujours la même erreur.

Re: Ajax post invalid input

Posté : 19 nov. 2015, 14:14
par kodjo
Veuillez ignorer le test unserialize via http://blog.tanist.co.uk/files/unserialize/ car c'est un unserialize php, qui est différent du unserialize javascript. c'est donc normal que le test ne passe pas.

J'ai testé avec parse_str(formData) et là php parvient à lire la chaine, ce qui veut dire que les données sont normalement valides.

Re: Ajax post invalid input

Posté : 19 nov. 2015, 14:21
par kodjo
j'ai posté un script ci-dessus pour tenter de passer les paramètres 1 par 1. Il est incorrect car il ne passe pas les bonnes données.
Voici la version corrigée. ça fonctionne et je parviens à passer les paramètres 1 par 1 sans avoir d'erreur:

Code : Tout sélectionner

$.each( formData, function( index, value ){ console.log(formData[index].name + '=' + formData[index].value); $.ajax({ url: "index.php?page=mapage", data: formData[index].name + '=' + formData[index].value, dataType: 'json', success: function(data) { //alert( "Data Loaded: " + data ); } }); });

Re: Ajax post invalid input

Posté : 19 nov. 2015, 14:35
par kodjo
Ok, tous les tests ci-dessus sont à ignorer car il y avait des erreurs de reproduction du contexte.
En passant chaque paramètre isolément dans la requête, je vois clairement ceux qui ne passent pas.

Pour un paramètre, la requête accepte en fait ce format, pour passer une string:
mon_parametre[32]=Un texte

Elle accepte également ce format, que l'on trouve pour un champ de formulaire vide
mon_parametre[32]=

L'erreur survient sur les paramètres contenant un integer. Ceci ne passe pas
mon_parametre[32]=9

Voyez-vous pourquoi une requete post refuserait ce dernier après un serialize?
Y a-til un formattage additionnel à faire pour pouvoir passer des paramètres ayant ce dernier format?

Re: Ajax post invalid input

Posté : 19 nov. 2015, 14:38
par kodjo
ok, tout fonctionne quand je passe les données dans JSON.stringify() avant de les envoyer.
Merci beaucoup :)