2012-02-01 26 views
27

Sto inviando una richiesta Ajax con 2 valori di post, il primo è "azione" che definisce quali azioni deve analizzare il mio script php, l'altro è "id" che è l'id dell'utente che deve analizzare lo script per .
Il server restituisce 6 valori all'interno di un array() e viene poi codificato per JSON tramite la funzione PHP: json_encode();
Alcune delle mie risposte sono HTML, ma quando ho codificare a JSON, sfugge "/" modo tale che diventi "\/"
come disabilitarlo?
anche quando non so come visualizzare questo in jQuery quando ottengo la risposta del server, ho solo pensato che mettere tutto in un div avrebbe solo mostrato i numeri e i codici HTML che avevo richiesto, ma visualizza l'array come è codificato in PHP.jQuery richiesta ajax con risposta JSON, come?

PHP

$response = array(); 
$response[] = "<a href=''>link</a>"; 
$response[] = 1; 
echo json_encode($response); 

jQuery:

$.ajax({ 
    type: "POST", 
    dataType: "json", 
    url: "main.php", 
    data: "action=loadall&id=" + id, 
    complete: function(data) { 
     $('#main').html(data.responseText); 
    } 
}); 

come faccio a fare questo per lavorare JSON?

+0

può anche scaricare la vostra risposta JSON per avere una migliore idea del problema? Non sei sicuro di cosa intendi con "/", quindi diventa "/" – Sid

+0

hai provato http://api.jquery.com/jQuery.getJSON/? –

+0

mi dispiace sid ho fatto un backslash ma è un po 'sparito :) ma ogni normale barra ha una barra rovesciata prima di "backslash" + "normal slash" ka_lin: l'ho guardato ma non l'ho capito, e se l'avessi fatto, come sarebbe invio alcuni dati post con la richiesta? – Flaashing

risposta

38

È necessario chiamare il

$.parseJSON(); 

Esempio:

... 
success: function(data){ 
     var json = $.parseJSON(data); // create an object with the key of the array 
     alert(json.html); // where html is the key of array that you want, $response['html'] = "<a>something..</a>"; 
    }, 
    error: function(data){ 
     var json = $.parseJSON(data); 
     alert(json.error); 
    } ... 

vedere questo in http://api.jquery.com/jQuery.parseJSON/

se avete ancora il problema della slash: ricerca di security.magicquotes.disabling.php o: function.stripslashes.php

Nota:

Questa risposta qui è per coloro che prova a utilizzare $.ajax con la proprietà dataType impostata su json e anche quella ottenuta tipo di risposta errata. La definizione di header('Content-type: application/json'); nel server può risolvere il problema, ma se si restituisce text/html o qualsiasi altro tipo, il metodo $.ajax deve convertirlo in json. Faccio un test con le versioni precedenti di jQuery e solo dopo la versione 1.4.4 la forza $.ajax per convertire qualsiasi tipo di contenuto nel passaggio dataType. Quindi se hai questo problema, prova ad aggiornare la tua versione di jQuery.

+0

restituisce un errore: mancante) dopo l'elenco degli argomenti "alert (data.0);" – Flaashing

+0

sì, era un esempio. Devi definire il tuo array con una chiave che può essere convertita in un oggetto, perché i numeri possono essere. like $ response ['html'] = "something"; di quanto lo chiami usando il parseJSON json.html (come nell'esempio sopra). – Guilherme

+0

oh sì, funziona! semplice come quello è quello che voglio :) grazie! – Flaashing

23

In primo luogo, vi aiuterà se si imposta le intestazioni di PHP per servire JSON:

header('Content-type: application/json'); 

In secondo luogo, vi aiuterà a regolare la chiamata AJAX:

$.ajax({ 
    url: "main.php", 
    type: "POST", 
    dataType: "json", 
    data: {"action": "loadall", "id": id}, 
    success: function(data){ 
     console.log(data); 
    }, 
    error: function(error){ 
     console.log("Error:"); 
     console.log(error); 
    } 
}); 

In caso di successo, la la risposta che si riceve deve essere selezionata come vero JSON e un oggetto deve essere registrato nella console.

NOTA: se si desidera acquisire puro html, è consigliabile prendere in considerazione l'utilizzo di un altro metodo per JSON, ma personalmente raccomando di utilizzare JSON e renderlo in html utilizzando i modelli (come Handlebars js).

+0

ho provato il tuo esempio, nella mia console firebug ottengo la risposta: mancante} dopo l'elenco di proprietà "sucess: function (data) {" sì, hai perso un coma dopo aver impostato i dati. ma ora mi dà una risposta codificata in json in firebug – Flaashing

+0

ho avuto un errore di sintassi - "sucess" dovrebbe essere "successo", e ho perso una virgola. Dovresti essere in grado di esplorare la tua risposta ora e produrre parti di essa nel DOM. – sgb

+0

sì a proposito, come dividi l'array in 6 bit in jquery e li produci in 6 elementi diversi? – Flaashing

1

Poiché si sta creando un markup come stringa, non è necessario convertirlo in json. Basta inviarlo poiché combina tutti gli elementi dell'array usando il metodo implode. Prova questo.

cambiamento PHP

$response = array(); 
$response[] = "<a href=''>link</a>"; 
$response[] = 1; 
echo implode("", $response);//<-----Combine array items into single string 

JS (cambiare la dataType da JSON in html o semplicemente non appoggiarla jQuery sarà capirlo)

$.ajax({ 
    type: "POST", 
    dataType: "html", 
    url: "main.php", 
    data: "action=loadall&id=" + id, 
    success: function(response){ 
     $('#main').html(response); 
    } 
}); 
+0

@Flaashing - Hai provato questo? – ShankarSangoli

+0

no perché voglio che ognuno dei 6 valori siano visualizzati in 6 elementi diversi :) – Flaashing

2

Collegare il controller clientide javascript e il controller di server php utilizzando i codici di invio e ricezione con dati bindati. Così il vostro codice PHP può inviare come risposta delta funzionale per js recepient/ascoltatore

vedere https://github.com/ArtNazarov/LazyJs

Ci dispiace per il mio cattivo inglese

Problemi correlati