2012-07-11 2 views
6

Je passe un tableau de Javascript à la page PHP, comme ci-dessous.PHP read Javascript array

var arrF1 = [{"Item":"item1no", 
     "Desc":"item1desc", 
     "Remarks":"item1note"}, 
      {"Item":"item2no", 
     "Desc":"item2desc", 
     "Remarks":"item2note"} 
    ]; 
$.ajax({   
    type: "POST", 
    url: "http://www.mydomain.com/pdfs/flist.php", 
    data: { favArray : arrF1 }, 
    success: function() { 
     alert('ok, sent'); 
    } 
}); 

Dans ma page PHP, j'ai lu le tableau ci-dessous.

$fArray = json_decode($_POST['favArray']) 

Et j'ai essayé d'accéder à la valeur de tableaux comme ceci.

$fArrav[0]->{'Item'} 
$fArrav[0]->{'Desc'} 
$fArrav[1]->{'Item'} 

Est-ce exact? Je génère un PDF sur le serveur en utilisant FPDF. Mais avec ce qui précède, il ne lit pas le tableau.

Je ne dois pas faire ça correctement. S'il vous plaît aider.

Merci.

+2

Essayez 'var_dump ($ FARRAY)' pour vous assurer qu'il est correctement – andrewsi

Répondre

3

Avec cette PHP:

function handlePost() { 
    $a = $_POST['favArray']; 
    var_dump($a); 
} 

..et ce Javascript:

function post() { 
    var a1 = [ 
     {"Item":"109249383", 
     "Desc":"item1desc", 
     "Remarks":"item1note"}, 

     {"Item":"298298210", 
     "Desc":"item2desc", 
     "Remarks":"item2note"} 
    ]; 

    $.ajax({ 
     type: "POST", 
     url: "readArray.php", 
     data: { favArray : a1 }, 
     success: function() { 
      alert1('ok, sent'); 
     } 
    }); 
} 

... Je reçois cette sortie:

HTTP/1.1 200 OK 
Content-Type: text/html 
Server: Microsoft-IIS/7.5 
X-Powered-By: PHP/5.3.10 
Date: Wed, 11 Jul 2012 21:04:16 GMT 
Content-Length: 315 

array(2) { 
    [0]=> 
    array(3) { 
    ["Item"]=> 
    string(9) "109249383" 
    ["Desc"]=> 
    string(9) "item1desc" 
    ["Remarks"]=> 
    string(9) "item1note" 
    } 
    [1]=> 
    array(3) { 
    ["Item"]=> 
    string(9) "298298210" 
    ["Desc"]=> 
    string(9) "item2desc" 
    ["Remarks"]=> 
    string(9) "item2note" 
    } 
} 

Dans ce cas, le codage des données sur le fil est et non JSON. C'est 'application/x-www-form-urlencoded' selon la valeur par défaut utilisée par la fonction ajax de jQuery. On dirait ceci:

favArray=%5B%7B%22Item%22%3A%22109249383%22%2C%22Desc%22%3A%22item1desc%22%2C 
    %22Remarks%22%3A%22item1note%22%7D%2C%7B%22Item%22%3A%22298298210%22%2C%22 
    Desc%22%3A%22item2desc%22%2C%22Remarks%22%3A%22item2note%22%7D%5D 

(sur une seule ligne)
Par conséquent, il n'a pas de sens d'appeler json_decode au sein de PHP - il n'a jamais été impliqué JSON. PHP décode automatiquement le corps du message codé par l'URL.


Si vous voulez encoder avec JSON, vous pouvez utiliser directement JSON.stringify(). Ce peut nécessitent json2.js du côté du navigateur. (Voir this answer)

Pour utiliser JSON, alors vous auriez besoin quelque chose comme ceci dans le navigateur:

function post_json_encoded() { 
    $.ajax({ 
     type: "POST", 
     url: "postArray.php", 
     contentType: 'application/json', // outbound header 
     dataType: 'text',    // expected response 
     data: JSON.stringify(a1),  // explicitly encode 
     success: function() { 
      alert1('ok, json sent'); 
     } 
    }); 
} 

... puis quelque chose comme ça sur le côté php:

function handlePost() { 
    header('Content-Type: text/plain; charset="UTF-8"'); 
    $post_body = file_get_contents('php://input'); 
    $a = json_decode($post_body); 
    var_dump($a); 
} 

Dans ce cas, la représentation sur le fil ressemble à ceci:

[{"Item":"109249383","Desc":"item1desc","Remarks":"item1note"}, 
{"Item":"298298210","Desc":"item2desc","Remarks":"item2note"}] 

...et la sortie php var_dump est la suivante:

array(2) { 
    [0]=> 
    object(stdClass)#1 (3) { 
    ["Item"]=> 
    string(9) "109249383" 
    ["Desc"]=> 
    string(9) "item1desc" 
    ["Remarks"]=> 
    string(9) "item1note" 
    } 
    [1]=> 
    object(stdClass)#2 (3) { 
    ["Item"]=> 
    string(9) "298298210" 
    ["Desc"]=> 
    string(9) "item2desc" 
    ["Remarks"]=> 
    string(9) "item2note" 
    } 
} 
+0

être rempli Salut, merci pour la très explaination détail. J'ai été en mesure de faire fonctionner cela en étudiant ce que vous aviez dit (je suis très nouveau à ce sujet). Terminé sans le décodage json, et tapez urlencoded. Merci. – user1509446

0

Pas besoin de supports supplémentaires:

$fArrav[0]->Item 
1
$fArray = $_POST['favArray']; 
echo $fArray[0]['Item']; // item1no 
echo $fArray[1]['Item']; // item2no