PDA

View Full Version : [php] json


DNAx86
12-10-2010, 17:49
Sto usando per la prima volta JSON,
non ha capito se cometto qualche errore io oppure se è un problema di configurazione del server Aruba su cui gira il codice php:

In javascript ho scritto questo oggetto:

this.JSON_Obj = { "bindings": [
{"ircEvent": "PRIVMSG", "method": "newURI"},
{"ircEvent": "PRIVMSG", "method": "randomURI"}
]
};

Questo oggetto è inseguito convertito in testo con l'apposita funzione e inviata tramite AJAX a server.

Il il codice php che riceve il testo json fà questo:

$oJSON = new Services_JSON();
$oJSON_Data = $oJSON->decode($HTTP_RAW_POST_DATA);

if( strlen($oJSON_Data->bindings)>0 ){
header('Content-Type: text/plain');
$xxxx=$oJSON_Data->bindings[0].method;
echo 'ricevuto: '.$xxxx;
}

Quendo poi il client riceve la risposta del server faccio solo un alert con la risposta del server:
l'alert ha questo testo:

<br />
<b>Catchable fatal error</b>: Object of class stdClass could not be converted to string in <b>/web/htdocs/www.XXXXX.it/home/concessionario/amministrazione/index.php</b> on line <b>18</b><br />

La linea 18 del codice php è l'ultima, quella dell'echo.

Perchè è sbagliato?
PS: Ho copiato il codice ( bindings[0].method e l'oggetto inviato) dal sito di JSON !!!

kk3z
12-10-2010, 20:53
. è l'operatore per concatenare le stringhe, l'operatore per accedere ai metodi e i membri della classe è ->

Comunque prova così:
$oJSON = new Services_JSON();
$oJSON_Data = $oJSON->decode($HTTP_RAW_POST_DATA, SERVICES_JSON_LOOSE_TYPE);

if( count($oJSON_Data['bindings']) ){
header('Content-Type: text/plain');
$xxxx=$oJSON_Data['bindings'][0]['method'];
echo 'ricevuto: '.$xxxx;
}

DNAx86
12-10-2010, 22:43
. è l'operatore per concatenare le stringhe, l'operatore per accedere ai metodi e i membri della classe è ->

Comunque prova così:
$oJSON = new Services_JSON();
$oJSON_Data = $oJSON->decode($HTTP_RAW_POST_DATA, SERVICES_JSON_LOOSE_TYPE);

if( count($oJSON_Data['bindings']) ){
header('Content-Type: text/plain');
$xxxx=$oJSON_Data['bindings'][0]['method'];
echo 'ricevuto: '.$xxxx;
}

Ti ringrazio della risposta,
però anche dopo avere fatto il copia e incolla del codice da te suggerito ho un'altro messaggio di errore:
<br />
<b>Fatal error</b>: Cannot use object of type stdClass as array in <b>/web/htdocs/www.XXXX.it/home/concessionario/amministrazione/index.php</b> on line <b>16</b><br />

kk3z
13-10-2010, 17:17
Ho letto male la documentazione, prova con questo:
$oJSON = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
$oJSON_Data = $oJSON->decode($HTTP_RAW_POST_DATA);

if( count($oJSON_Data['bindings']) ){
header('Content-Type: text/plain');
$xxxx=$oJSON_Data['bindings'][0]['method'];
echo 'ricevuto: '.$xxxx;
}