2012-01-07 4 views
1

J'ai un tableau JAVASCRIPT qui ressemble à ceci:tableau JavaScript dans jQuery .post appel AJAX

postarray['min_price'] = 120000; 
postarray['max_price'] = 150000; 

Je suis en train de passer ce à un appel AJAX via la fonction jQuery .post pour que le fichier .php il est dans ce format:

$_REQUEST['query']['min_price'] = 120000; 
$_REQUEST['query']['max_price'] = 150000; 

jusqu'à présent, je l'ai essayé:

$.post("ajax_findproperties.php", {query: postarray}, 
     function(data){ 
      // processing function with JSON result 
     } 
    ,'json'); 

Mais je n'ai pas eu de chance. J'ai même essayé de changer le postarray de var pour interroger et ai alors essayé query.serialize() à la place du bloc variable entre parenthèses, mais sans la chance non plus.

Lorsque je vérifie mon statut sur Firebug, l'appel AJAX n'a ​​absolument aucun ensemble POST vars défini - vide complet.

+0

Il est sans doute possible, mais pourquoi pas seulement query_min_price, query_max_price? – sdfadfaasd

+0

Parce que c'est plus facile sur mon côté PHP si tout cela est unifié dans un tableau. Le formulaire original avait name = "query [min_price]" là ... Essayant de ne pas trop changer. – jeffkee

+0

Également une note étrange: quand j'alerte postarray.length, il renvoie 0. Mais quand je fais une boucle for (x in postarray) et alerte les x et postarray [x], les variables et les clés du tableau apparaissent très bien. Qu'est-ce qui se passe avec ça? – jeffkee

Répondre

2

Le tableau javascript est pas un tableau, il est un objet. Définir avant:

var postarray = {}; 
postarray['min_price'] = 120000; 
postarray['max_price'] = 150000; 

ou remplacer par:

var postarray = { 
    min_price: 120000, 
    max_price: 150000 
}; 

Maintenant, le JSON.stringify fonctionne:

alert(JSON.stringify(postarray)); 

Voir aussi ce example.

Mais cet objet doit également être envoyer sans JSON.stringify():

$.post("ajax_findproperties.php", {query: postarray}, ...); 
+0

Meilleure réponse jusqu'à présent! Je l'essaie, jusqu'à présent, il montre des signes positifs ... juste quelques réglages supplémentaires pour s'assurer que tout est correct ... – jeffkee

0

Avez-vous essayé de le convertir avec JSON.stringify(); puis de faire un json_decode(...); dans le script PHP?

+0

J'ai essayé JSON.stringify (postarray) et cela n'a renvoyé que [], aucune chaîne ou vars que ce soit. – jeffkee

+1

Vous devriez probablement le changer en un objet approprié plutôt qu'un tableau: 'query.min_price = 120000;' et 'query.max_price = 150000;'. Si vous insistez pour le conserver en format tableau plutôt qu'en format objet, vous devez en informer jQuery en ajoutant des parenthèses au nom de la variable: '{'query []': postarray}', même si je ne suis pas sûr Cela gérera correctement les index non-entiers. –

+0

Dans ce cas, comment puis-je générer la partie query.min_price à partir des données de formulaire? Ils ne sont pas prédéfinis. Ils sont déterminés par le nom du champ d'entrée utilisé, et plus ou moins peuvent être ajoutés dynamiquement. query.min_price, query.max_price, query.other_fieldname, query.more_fieldnames etc etc. Comment faire une boucle en fonction des attributs de champ ? – jeffkee

0

Essayez cette solution: ajouter [] à votre clé query

$.post("ajax_findproperties.php", { 'query[]': postarray }, 
    function(data) { }, 
    'json'); 

Source: http://api.jquery.com/jQuery.post/#example-2

+0

En fait, je l'ai déjà essayé mais sans aucune chance non plus. – jeffkee