2013-10-28 17 views
5

Per favore aiutami a capire cosa c'è che non va. Voglio analizzare la risposta JSON come oggetto.SyntaxError: JSON Errore di analisi: identificatore imprevisto "oggetto"

PHP codice process.php:

<?php 
    $return = array(); 
     array_push($return['amount']="$amount"); 
     array_push($return['fee']="$fee"); 
     array_push($return['total']="$total"); 
    echo json_encode($return); 
?> 

Restituisce JSON stringa:

{"amount":"350","fee":"0","total":"350"} 

JS (jquery) Codice:

$.getJSON("process.php?amount="+amount, function(data,status) { 
    var obj = $.parseJSON(data); 
    alert (obj.amount); 
}); 

ricevo errore:

SyntaxError: JSON Parse error: Unexpected identifier "object"

MA! Quando provo ad inserire risultato invece i dati (ma inserire 'citazioni sinistra/destra):

var obj = $.parseJSON('{"amount":"350","fee":"0","total":"350"}'); 

e vedo avviso = 350. Quindi, che sta funzionando bene.

cerco di fare qualcosa di simile:

var jsonreply = "'"+data+"'"; 
var obj = $.parseJSON(jsonreply); 

ma ha ricevuto sotto l'errore:

SyntaxError: JSON Parse error: Single quotes (') are not allowed in JSON

+0

quando tipo di dati è ricevuto JSON in jQuery metodi Ajax non è necessario usare '$ .parseJSON' su reponse, è già stato convertito internamente. Per provare ciò prova 'console.log ($ .type (data))' nel tuo callback di successo – charlietfl

risposta

7

getJSON analizza il JSON per voi - chiamando $.parseJSON convertirà l'oggetto nella stringa [object Object] e quindi provare a analizzare che, dando un errore. Basta omettere la chiamata $.parseJSON e utilizzare data direttamente.


Inoltre, Vorrei sottolineare che le chiamate a array_push sono strani e inutili. array_push richiede solitamente un array e un valore per inserirlo, ma (ad esempio) nella prima riga si imposta $return['amount'] su "$amount" e quindi si passa da $return['amount'] a array_push, che non fa nulla nella migliore delle ipotesi e potrebbe darti un avvertimento o un errore al peggio. Si otterrebbe lo stesso comportamento esatto se avete fatto queste cose:

$return['amount']="$amount"; 
$return['fee']="$fee"; 
$return['total']="$total"; 

allora si potrebbe anche rendersi conto che le virgolette intorno, diciamo, "$amount" sono inutili, e si potrebbe effettivamente fare questo:

$return['amount']=$amount; 
$return['fee']=$fee; 
$return['total']=$total; 

Infine, si può effettivamente condensare tutte le cinque linee utilizzando alcuni speciali array sintassi molto semplice:

echo json_encode(array(
    'amount' => $amount, 
    'fee' => $fee, 
    'total' => $total 
)); 

Questo è piuttosto un po 'più bello se lo dico io .

+0

Inoltre, perché stai usando array_push nel tuo script PHP? Se desideri aggiungere valori a un array, puoi farlo più facilmente in questo modo: '$ return ['amount'] = $ amount;' – andrewvnice

+0

@mazinsights: Il tuo commento potrebbe appartenere meglio alla domanda, come Non ero quello che ha scritto il codice in primo luogo! È un buon suggerimento, però, quindi ho aggiunto (e un po 'di più, in realtà) alla mia risposta. – icktoofay

+0

Nell'esempio sopra faccio un semplice codice. In realtà, ho usato array, ma quando ho array_push su una matrice su un'altra ho ricevuto risultati non buoni per JSON. Qualcosa come ["0", {"key0": "valore", "chiave1": "valore"}, {"chiave0": "valore"}] – Vasvas

0

Sembra che il vostro errore è qui:

var jsonreply = "'"+data+"'"; 

cercano di fuggire quelle ' con "\". Come

var jsonreply = "\'"+data+"\'"; 
+0

'' 'non è un carattere speciale tra virgolette; il backslashing non farà nulla. Forse intendevi "" \\ "" ', ma poi stai ancora generando JSON non valido. – icktoofay

1

In realtà non è necessario analizzarlo.U può accedere direttamente a esso

$.getJSON("process.php?amount="+amount, function(data,status) { 
alert (data.amount); 
}); 
+0

Penso che sia abbastanza chiaro ora –

Problemi correlati