2010-09-08 10 views
12

Ich versuche, JSON zu einer PHP-Datei mit jQuery AJAX zu senden, im Grunde, was ich versuche, die Werte und IDs einer Reihe von Kind-Elemente zu erhalten und sie dann zuweisen JSON-Objekt und dann senden Sie das Objekt über Ajax an die PHP-Datei, die es dann verarbeiten und in eine Datenbank eingeben würde.Senden von JSON über AJAX nach PHP mit jQuery

Hier ist mein Code,

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?'; 
?> 

Es erstellt die Datei, aber es ist völlig leer, was eine Idee, es sein könnte ?

Vielen Dank im Voraus!

+1

In Ihrem '' debug mit 'print_r ($ _ POST);' zu prüfen, ob JS in Ordnung ist. Und Sie brauchen nicht 'datatype:‚json'' in Ihrem '$ Schnipsel()' – Zlatev

+0

ich ein Array im Gegenzug immer bin, Array ( [0] => stdClass Objekt ( [id] => mail_1 [Wert] => 150 Liter Cobra (G2) ) [1] => stdClass Objekt ( [id] => mail_2 [Wert] => CPC1518 ) ), bin ich kämpfen, um verarbeite ich es, könnte ich dann auf das Array zugreifen, zB $ array [0] ['id']? – Odyss3us

+0

Als ich print_r ($ _ POST), obwohl ich diese bekommen ...Array ( [json] => [{ "id": "mail_1", "Wert": "150-Liter-Cobra (G1)"}, { "id": "mail_2", "Wert": "200 Liter Cobra (G1) "}] ) – Odyss3us

Antwort

18

Sie können versuchen, die JSON.stringify()-Methode zu verwenden, um Ihr Array automatisch in JSON zu konvertieren. Übergeben Sie einfach die Ausgabe von diesem.

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

this helps

+14

upvotes für "automagically". – Jish

+0

Ich liebe Magie: D +1 – imperium2335

+0

@jish tat einfach. Neues Lieblingswort. Beats flub. – copilot0910

1

Sie eine content auf Ajax POST setzen soll. Ich würde contentType verwenden: "application/json";

1

Sie sollten json_encode() nicht json_decode() verwenden! Auf diese Weise erhalten Sie die JSON-Zeichenfolge und können sie schreiben.

1

Sie müssen json_decode nicht verwenden, wenn Sie es in einer Textdatei speichern. jQuery kodiert Ihr Array im JSON-Format, PHP sollte dieses Format dann einfach in die Textdatei schreiben. Wenn Sie diese Datei öffnen und auf die Daten in einer nutzbaren Weise zugreifen möchten, lesen Sie ihren Inhalt in eine Variable und führen Sie dann json_decode() darauf aus.

2

Verwenden Sie kein Array.
eine einfache Zeichenfolge wie folgt verwendet werden:

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 += ']'; 

und in der Ajax nur die Zeichenfolge 'o'

 data: { json: newArray } 

in der PHP-Datei nur einen json_decode ($ json, true) machen senden;
es wird ein Array von Array zurück, die Sie von einem foreach
zugreifen können, wenn Sie das Array, var_dump Einsatz sehen wollen ($ person);