2012-07-21 6 views
0

je suis en train d'envoyer une entrée de forme sous forme de tableau à un script phptableau envoyer comme JSON script php: retourne un tableau vide

function submit_form(){ 
    var arr = []; 
    var key, val ; 
    $('#form input').each(function(){ 

     key = $(this).attr('id'); 
     val = $(this).val(); 
     arr[key] = val; 

    }) 
    alert(arr['username']); // check to see if array is not empty 

    var jsondata = JSON.stringify(arr); 

    $.post(base_url+'profile/edit_profile/<?php echo $profile_username; ?>' , {data : jsondata }, function(){ 
    }) 
} 

sur le script php

$data = json_decode($_post['data']); 
var_dump($data); 
exit; 

et est ici le résultat

array (size=0) 
    empty 
+0

Avez-vous essayé de transformer '{data: ...}' en '{" data ": ...}'? –

+0

@arxanas, ne semble pas pertinent – Alexander

Répondre

3

Vous utilisez un tableau lorsque vous utilisez un objet. Les méthodes JSON ignorent les propriétés non numériques des tableaux.


Bien au lieu d'utiliser les attributs id, utilisez name, puis utilisez .serialize().

var data = $('#form input').serialize(); 
+0

+1 pour suggérer '.serialize()'. – hakre

+0

merci, je pensais en utilisant serialize qui me donnerait une chaîne de poires "k & v" et il utilisé pour la méthode GET? – max

+0

@max: Si vous voulez une structure d'objet, vous pouvez utiliser 'serializeArray()', ce qui vous donnera un tableau d'objets. –

0

Cela nécessite d'abord un débogage de base. Avant de décoder les données, le vider de sorte que vous ne vous assurer que les données sont correctes:

$data = $this->input->post('data'); 
var_dump($data); 
$array = json_decode($data); 
var_dump($array); 
exit; 

leçons à apprendre:

  • Faites un pas après l'autre. Le plus stupide sera le mieux.
  • Avant et après chaque étape, vérifiez les données.