2010-09-08 15 views
12

Sto cercando di inviare JSON in un file PHP utilizzando jQuery AJAX, in pratica quello che sto cercando di fare è ottenere i valori e gli ID di un gruppo di elementi figlio e quindi assegnarli a un Oggetto JSON e quindi inviare quell'oggetto tramite ajax al file PHP che poi lo elabora e lo inserisce in un database.Invio di JSON tramite AJAX a PHP utilizzando jQuery

Ecco il mio codice,

JavaScript/jQuery:

function test(){ 
    var selects = $('#systems_wrapper').find('.dropDowns'); 
    var newArray = new Array(); 

    selects.each(function(){ 
     var id = $(this).attr('id'); 
     var val = $(this).val(); 
     var o = { 'id': id, 'value': val }; 

     newArray.push(o); 
    }); 

    $.ajax({ 
      type: "POST", 
      url: "qwer.php", 
      dataType: 'json', 
      data: { json: newArray } 
     }); 

} 

PHP:

<?php 
    $json = $_POST['json']; 
    $person = json_decode($json); 

    $file = fopen('test.txt','w+'); 
    fwrite($file, $person); 
    fclose($file); 

    echo 'success?'; 
?> 

Si crea il file, ma è completamente vuoto, qualsiasi idea di cosa potrebbe essere ?

Grazie in anticipo!

+1

Nel tuo '' debug con 'print_r ($ _ POST);' per verificare se JS è ok. E non hai bisogno di 'dataType: 'json'' nel tuo' $ .ajax() ' – Zlatev

+0

Ricevo un array in risposta, Array ( [0] => stdClass Oggetto ( [id] => mail_1 [valore] => 150 litri Cobra (G2) ) [1] => stdClass oggetto ( [id] => mail_2 [valore] => CPC1518 ) ), ho difficoltà a elaborarlo però, potrei accedere alla matrice in questo modo, $ array [0] ['id'] per esempio? – Odyss3us

+0

Quando stampo_r ($ _ POST) anche se ottengo questo ...Array ( [json] => [{"id": "mail_1", "valore": "150 litri Cobra (G1)"}, {"id": "mail_2", "valore": "200 litri Cobra (G1) "}] ) – Odyss3us

risposta

18

Si potrebbe provare a utilizzare il metodo JSON.stringify() per convertire automaticamente l'array in JSON. Basta passare l'output da questo.

data: { json: JSON.stringify(newArray) } 

Spero che questo aiuti

+14

Upvotes per "automagically". – Jish

+0

Io amo la magia: D +1 – imperium2335

+0

@jish Ho appena fatto. Nuova parola preferita. Beats flub. – copilot0910

1

È necessario impostare un contentType sul ajax POST. Userei contentType: "application/json";

1

È necessario utilizzare json_encode() non json_decode()! In questo modo otterrai la stringa JSON e sarai in grado di scriverla.

1

Non è necessario utilizzare json_decode se lo si sta salvando in un file di testo. jQuery sta codificando la tua matrice in formato JSON, PHP dovrebbe quindi semplicemente scrivere quel formato direttamente nel file di testo. Quando si desidera aprire quel file e accedere ai dati in modo utilizzabile, leggere il suo contenuto in una variabile e quindi eseguire json_decode() su di esso.

2

Non utilizzare un array.
utilizzare una stringa semplice come questo:

var o = '['; 
selects.each(function(){ 
    var id = $(this).attr('id'); 
    var val = $(this).val(); 
    o += '{ "id": "'+id+'", "value": "'+val+'" },';  
}); 
o = o.substring(0,o.length-1); 
o += ']'; 

e nel ajax solo inviare la stringa 'o'

 data: { json: newArray } 

nel file php solo fare una json_decode ($ JSON, true);
restituirà una matrice di array a cui è possibile accedere da un foreach
se si desidera visualizzare la matrice, utilizzare var_dump ($ persona);

Problemi correlati