2012-07-11 19 views
6

Estoy pasando una matriz de Javascript a la página de PHP, como a continuación.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'); 
    } 
}); 

En mi página de PHP, leo la matriz de la siguiente manera.

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

Y traté de acceder al valor de las matrices de esta manera.

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

¿Es esto correcto? Estoy generando un PDF en el servidor usando FPDF. Pero con lo anterior, no está leyendo la matriz.

No debo estar haciendo esto bien. Por favor ayuda.

Gracias.

+2

Pruebe 'var_dump ($ farray)' para asegurarse de que está siendo poblada adecuadamente – andrewsi

Respuesta

3

Con este PHP:

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

..y este 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'); 
     } 
    }); 
} 

... puedo obtener este resultado:

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" 
    } 
} 

En este caso, la codificación de los datos en el cable es no JSON. Es 'application/x-www-form-urlencoded' según el valor predeterminado utilizado por la función ajax de jQuery. Se ve así:

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 

(todo en una línea)
Por lo tanto, no tiene sentido para llamar json_decode dentro de PHP - nunca hubo ninguna JSON involucrados. PHP decodifica automáticamente el cuerpo del mensaje codificado en url.


Si desea para codificar con JSON, entonces se puede utilizar directamente JSON.stringify(). Este puede requiere json2.js en el lado del navegador. (Ver this answer)

Para utilizar JSON, entonces usted tendría algo como esto en el navegador:

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

... y luego algo como esto en el lado 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); 
} 

En este caso, la representación en el cable se ve así:

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

...y la salida php var_dump es la siguiente:

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

Hola, gracias por el detalle explicación muy. Pude lograr que esto funcionara al estudiar lo que dijiste (soy MUY nuevo en esto). Terminó sin la decodificación json y escribe urlencoded. Gracias. – user1509446

0

hay necesidad de que los soportes adicionales:

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