2010-11-05 12 views
6

Bien, ¿tengo mi cadena json construida pero no estoy seguro de qué hacer a continuación?Jquery Publicación de AJAX en 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"); 
         } 
        }); 
      }); 

En mi archivo php yo estaba tratando de escribir el dataString a un archivo de texto para que pudiera ver su entrada a través de bien, pero nada estaba en el archivo de texto !? Estoy haciendo el lado del cliente mal algo o lateral PHP, mi código php:

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

Utilice firebug para comprobar en lugar de escribir en un archivo. – Petah

+0

Sí, puedo verlo bien en Firebug pero solo quería confirmar que PHP lo estaba consiguiendo bien – benhowdle89

Respuesta

9

Por qué no tratas de construir sus datos como éste

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 
}); 

Luego, en su AJAX llamar

data: postData, 

Ahora su script PHP puede procesar los datos como un multi -arsenal dimensional

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

Esto debe hacerlo:

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

Usted puede tratar de verificar:

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

genial, ¿estoy en lo cierto al pensar que necesito usar json_decode en el lado de PHP? Es decir. 'por cada' fila 'haga esto' tipo de cosas ... – benhowdle89

+0

si desea analizar los datos en la cadena, debe usar json_decode luego – jerjer

1

El problema se sea ​​que está intentando acceder a una variable POST llamada "dataString" que no existe. El hecho de que establezca la propiedad "data" en los contenidos de una variable llamada "dataString" no significa que su variable de publicación se llamará "dataString".

Usted podría intentar esto:

data: { "dataString": dataString }, 

Esto pasa un objeto a la función jQuery que tiene una propiedad llamada "dataString" y el valor de su cadena de datos real. jQuery tomará todas las propiedades de este objeto (en este caso solo una) y las establecerá como variables de publicación en la solicitud HTTP que eventualmente enviará a su aplicación PHP. Esto le permite acceder a los datos a través de la llamada $ _POST ["dataString"].

Steve

4

Primero convertir el objeto JSON a una cadena en js así:

var json_string=JSON.stringify(json_object); 

A continuación, pasar a PHP como una cadena y luego en php decodificarlo, así:

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

espero esto ayude a sólo encontrar este hilo ...

0

tengo problemas cuando uso:

url: "/folder/form.php", 

Y tengo que usar:

url: "folder/form.php",, 
Cuestiones relacionadas