2010-11-02 8 views
0

Je suis en train de changer mon code pour utiliser JSON sur recommandation d'une question précédente de simplifier les choses un peu ...JSON ne pas transmettre les données d'un tableau en PHP

côté client:

<script type="text/javascript" src="../js/jquery-1.3.2.min.js"></script> 
<script type="text/javascript" src="../js/jquery.tablednd_0_5.js"></script> 
<script type="text/javascript" src="../js/jquery.json-2.2.js"></script> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#table').tableDnD(); 
    }); 
    function sendData() { 
     data = $('#table').tableDnDSerialize(); 
     alert(data); // shows expected data 
     document.dataform.data.value = $.toJson(data); 
     document.data.submit(); 
    } 
</script> 

<form action="$php_page_name" method="post" name="dataform" onSubmit="sendData()"> 
    <input type="hidden" name="data" /> 
    <input type="submit" value="Submit" /> 
</form> 

Le js alert sort le tableau attendu, qui je pense est converti en une chaîne par ce point. Mais lorsque je soumets form.data, mon php:

$data = json_decode($_POST['data']); 
print_r($data); 
print_r($_POST); 

ne retourne que:

Array ([data] =>)

Toutes les idées pourquoi rien est adopté?

Cheers, Andy

Répondre

3

Vous devez attendre le retour de la fonction:

onSubmit="return sendData()" 

Sinon, le formulaire sera soumis et Does'nt immédiatement Attendons les données sont modifiées.

dans la fonction remplacer

document.data.submit(); 

avec ceci:

return true; 

De plus: en supposant que vous utilisez cela comme jquery.json-2.2.js:
http://code.google.com/p/jquery-json/downloads/detail?name=jquery.json-2.2.js&can=2&q=
Le méthodolo- le nom est
$.toJSON au lieu de $.toJson

+0

Le formulaire est actuellement seulement soumis quand cliquer n'est pas cliqué immédiatement ... cependant je l'ai changé selon votre suggestion, mais il n'a fait aucune différence ... – Andy

+0

C'est ce que je veux dire, si le bouton de soumission est cliqué, sans les changements suggérés le formulaire n'attend pas que la fonction ait manipulé le champ. Il peut y avoir d'autres bogues qui empêchent le formulaire de soumettre la valeur supposée, mais ma suggestion est obligatoire de toute façon. –

+0

OK merci pour ça alors, je l'ai changé maintenant. Toujours rien étant reçu du côté php si ... – Andy

1

essayez de ne pas nommer à des éléments identiques. votre formulaire est nommé "données" et votre entrée cachée.

+0

Et ne doit pas document.data.data.value = $ .toJson (données); être document.data.value = $ .toJson (données); ? – Repox

+0

Tout à fait raison, je vais changer cela. Des pensées sur ma question? – Andy

+0

Je l'ai changé en: document.dataform.data.value = $ .toJson (data); – Andy

Questions connexes