2010-11-05 5 views
6

OK, j'ai ma chaîne JSON construite, mais je ne suis pas sûr que faire ensuite?Jquery AJAX post à 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"); 
         } 
        }); 
      }); 

Dans mon fichier php je tentais d'écrire le datastring dans un fichier texte pour que je puisse voir son entrée par ok, mais rien n'était dans le fichier texte !? Est-ce que je fais quelque chose de mal côté client ou côté PHP, mon code php:

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

Utilisez firebug pour vérifier au lieu d'écrire dans un fichier. – Petah

+0

Ouais je peux le voir très bien dans Firebug mais je voulais juste confirmer que le PHP était correct – benhowdle89

Répondre

9

Pourquoi vous essayez de ne pas construire vos données comme celui-ci

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

Puis dans votre appel AJAX

data: postData, 

Maintenant, votre script PHP peut traiter les données en tant que plusieurs -dimensional array

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

Cela devrait le faire:

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

Vous pouvez essayer de vérifier:

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

cool, ai-je raison de penser que j'ai besoin d'utiliser json_decode du côté PHP? C'est à dire. 'pour chaque "rangée" faire ce genre de chose ... – benhowdle89

+0

si vous voulez analyser les données dans la chaîne, vous devez utiliser json_decode puis – jerjer

1

Le problème soit que vous essayez d'accéder à une variable POST appelée "dataString" qui n'existe pas. Le fait que vous définissiez la propriété "data" sur le contenu d'une variable appelée "dataString" ne signifie pas que votre variable post sera appelée "dataString".

Vous pouvez essayer ceci:

data: { "dataString": dataString }, 

Cela passe un objet à la fonction jQuery qui a une propriété appelée « datastring » et la valeur de votre chaîne de données réelles. jQuery va prendre toutes les propriétés de cet objet (dans ce cas un seul) et les définir comme variables post sur la requête HTTP qu'il enverra finalement à votre application PHP. Cela vous permet d'accéder aux données via l'appel $ _POST ["dataString"].

Steve

4

d'abord convertir l'objet JSON à une chaîne dans js comme ceci:

var json_string=JSON.stringify(json_object); 

Ensuite, passer à PHP comme une chaîne, puis dans decode php, comme ceci:

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

J'espère cela aide quelqu'un juste de trouver ce fil ...

0

J'ai des problèmes lors de l'utilisation:

url: "/folder/form.php", 

Et je dois utiliser:

url: "folder/form.php",,