Newsgroup: it.comp.www.php
Titolo: Inviare dati JSON a php

E' possibile inviare dati JSON al PHP, oltre che ricevere risposta in 
JSON con JQuery?
Max


Ajax, è questo che fà.


Beh, non solo, cmq è sicuramente uno dei metodi più comodi per passare dati
M


$.post("script.php", { para1: "aaaa", para2: "bbbb", parax: "xxxxx" } );

 JSON con JQuery?
http://php.net/manual/en/book.json.php


Scusa, ma in questo modo passi i dati in forma di query non in JSON.
Infatti questa diverrï¿œ: script.php?para1=aaaa;para2=bbbb,parax:xxxxx

 Infatti questa diverrà: script.php?para1=aaaa;para2=bbbb,parax:xxxxx
Hai parzialmente ragione. Vengono comunque passati in POST e non in GET, 
quindi non sull'URL.
Nel manuale di jQuery:
http://api.jquery.com/jQuery.ajax/
e` spiegato come impedire a .ajax() di trasformare i dati in parametri 
GET/POST (fanno l'esempio di un XML, ma puoi adattarlo a JSON), ma mi 
chiedo se abbia senso: sul client devi trasformare l'array javascript in 
una stringa json, e poi sul server devi trasformare la stringa json in un 
array PHP. Tanto vale fare fare la conversione array->parametri a jQuery, 
e parametro->array al motore Zend di PHP.
Bye.

 Infatti questa diverrà: script.php?para1=aaaa;para2=bbbb,parax:xxxxx
già
bisogna fare così (volendo usare la libreria json2 di 
json.org
)
$.post("script.php", { para1: "aaaa", jsonPara: JSON.stringify(oggetto), 
parax: "xxxxx" } );
M


Infatti la confusione che si fa è che JQuery & Co attendono la RISPOSTA 
in JSON (o XML o quello che vuoi) e non anche il contrario! Molti 
pensano che si tratta di una comunicazione interamente in JSON ma il 
call avviene sempre con il metodo classico: query.
Pensavo fosse più scontato e anche io mi chiedevo se fosse corretto, a 
questo punto.
A me serve inviare dei dati ad uno script PHP che li processa, ma 
ovviamente deve avere la tipizzazione... con un opportuno trattamento di 
JSON in JS e il json_decode di PHP si può fare.
Pensavo, ripeto, fosse più ovvio e invece bisogna usare, come 
nell'esempio di Motosauro, stringify() di Crockford (quindi caricando un 
ulteriore JS a parte) e passarlo come valore di un parametro.
Ho anche pensato di usare un serialize() che ricalca il metodo di PHP, 
passando così correttamente tutti i tipi al PHP e unserializzarlo.

 ovviamente deve avere la tipizzazione...
Occhio che sia PHP che JS sono linguaggi a tipizzazione debole.
Piuttosto che aspettarmi la tipizzazione dalla rete (che potrebbe non 
essere corretta) io preferirei definirla a priori e verificarla server 
side, anche in una Intranet (non sai mai dove si nascondano i bug dei 
browser :).
O, in alternativa, passare un campo "extra" per ogni parametro che 
definisca il tipo (stringa, int, float, ecc.)
Bye.


Si come vedi tutti rispondono: ma JQuery questo fa! La prassi è a questo 
punto chiamare tanti script quanti sono i dati, o definire con un 
parametro extra il tipo di dato.

 passando così correttamente tutti i tipi al PHP e unserializzarlo.
il metodo stringify() dovrebbe funzionare, occhio però a codificarne
il risultato in modo che sia compatibile con gli url (cioè ad esempio
al posto di & devi mettere %26 e così via), in php c'è la funzione
urlencode, in jquery ci dovrebbe essere qualcosa di simile.
Poi da php devi fare la codifica (urldecode) prima di poterlo usare.

ok l'avevo fatta troppo facile
famo
così:
$(document).ready(function()
{
  var data =
  {
    "miarubrica":
    [
      { "nome" : "Marco", "cognome" : "bianchi" },
      { "nome" : "Anna", "cognome" : "rossi" },
      { "nome" : "Livia", "cognome" : "verdi" }
    ]
  }
  var dataString = JSON.stringify(data);
  $.post('script.php', { data: dataString}, miaCallBack);
});
lato server:
$res = json_decode(stripslashes($_POST['data']), true);
ho poi un oggetto php...
ok?

 ok?
Eh! Certo!


Un sistema abbastanza comodo sarebbe anche:
var data = Object;
var entry = Object;
entry.nome = "Marco";
entry.cognome = "Bianchi";
data[0] = entry;
var dataString = JSON.stringify(data);
Marco