2010-11-05 20 views
6

OK ho costruito la mia stringa json ma non sono sicuro di cosa fare dopo ??Jquery AJAX post su PHP

$('#submit').live('click',function(){ 

       var dataString = '['; 
        $('#items tr').not(':first').each(function(){ 
         var index = $('#items tr').index(this); 
         var supp_short_code=$(this).closest('tr').find('.supp_short_code').text(); 
         var project_ref=$(this).closest('tr').find('.project_ref').text(); 
         var om_part_no=$(this).closest('tr').find('.om_part_no').text(); 
         var description=$(this).closest('tr').find('.description').text(); 
         var cost_of_items=$(this).closest('tr').find('.cost_of_items').text(); 
         var cost_total=$(this).closest('tr').find('.cost_total').text(); 
         dataString += '{"row":"' + index + '", "supp_short_code":"' + supp_short_code + '", "project_ref":"' + project_ref + '", "om_part_no":"' + om_part_no + '", "description":"' + description + '", "cost_of_items":"' + cost_of_items + '", "cost_total_td":"' + cost_total + '"}'; 
        }); 
        dataString += ']'; 

       $.ajax 
        ({ 
        type: "POST", 
        url: "order.php", 
        data: dataString, 
        cache: false, 
        success: function() 
         { 
          alert("Order Submitted"); 
         } 
        }); 
      }); 

Nel mio file php stavo tentando di scrivere la datastring in un file di testo in modo ho potuto vedere il suo che passa male, ma niente è stato nel file di testo !? Sto facendo qualcosa di lato client sbagliato o lato PHP, il mio codice php:

<?php 
    $stringData = $_POST['dataString']; 
    $myFile = "testFile.txt"; 
    $fh = fopen($myFile, 'w') or die("can't open file"); 
    fwrite($fh, $stringData); 
    fclose($fh); 
?> 
+0

Utilizzare Firebug per controllare invece di scrivere su un file. – Petah

+0

Sì, riesco a vederlo bene in Firebug ma volevo solo confermare che il PHP fosse ok ok – benhowdle89

risposta

9

Perché non provare a costruire i vostri dati come questo

var postData = {}; 
$('#items tr').not(':first').each(function(index, value) { 
    var keyPrefix = 'data[' + index + ']'; 
    postData[keyPrefix + '[supp_short_code]'] = $(this).closest('tr').find('.supp_short_code').text(); 
    postData[keyPrefix + '[project_ref]'] = $(this).closest('tr').find('.project_ref').text(); 
    // and so on 
}); 

Poi, nel tuo AJAX chiamare

data: postData, 

Ora il vostro script PHP in grado di elaborare i dati come un multi array tridimensionale

<?php 
if (isset($_POST['data']) && is_array($_POST['data'])) { 
    foreach ($_POST['data'] as $row => $data) { 
     echo $data['supp_short_code']; 
     echo $data['project_ref']; 
     // and so on 
    } 
} 
9

Questo dovrebbe farlo:

... 
$.ajax({ 
    type: "POST", 
    url: "order.php", 
    data: { 'dataString': dataString }, 
    cache: false, 
    success: function() 
     { 
      alert("Order Submitted"); 
     } 
    }); 

Si può provare a verificare:

<?php 
    $stringData = $_POST['dataString']; 
    echo $stringData; 
?> 
+1

cool, ho ragione a pensare che ho bisogno di usare json_decode sul lato PHP? Vale a dire. 'per ogni "riga" fai questo' tipo di cosa ... – benhowdle89

+0

se vuoi analizzare i dati nella stringa dovresti usare json_decode quindi – jerjer

1

il problema sii che stai tentando di accedere a una variabile POST chiamata "dataString" che non esiste. Solo perché hai impostato la proprietà "data" sul contenuto di una variabile chiamata "dataString" non significa che la tua variabile post sarà chiamata "dataString".

Si potrebbe provare questo:

data: { "dataString": dataString }, 

Questo passa un oggetto alla funzione jQuery che ha una proprietà chiamata "datastring" e il valore della vostra stringa di dati reali. jQuery prenderà tutte le proprietà da questo oggetto (in questo caso solo uno) e le imposterà come variabili post sulla richiesta HTTP che alla fine invierà alla tua applicazione PHP. Ciò consente di accedere ai dati tramite la chiamata $ _POST ["dataString"].

Steve

4

prima convertire l'oggetto JSON per una stringa in js come questo:

var json_string=JSON.stringify(json_object); 

Poi, passare a PHP come una stringa e poi in php decodificarlo, in questo modo:

<?php 
    $map = json_decode($_POST['json_string']); 
?> 

spero questo aiuta chiunque solo trovare questa discussione ...

0

ho problemi quando l'uso:

url: "/folder/form.php", 

E devo usare:

url: "folder/form.php",,