2008-11-29 4 views
18

sto cercando di trovare il modo migliore per visualizzare i risultati sulla mia pagina tramite una chiamata Ajax utilizzando jQuery, pensi che il modo migliore sia di passarlo come JSON o testo normale? Ho già lavorato con le chiamate ajax, ma non sono sicuro dell'opzione preferita rispetto all'altra e per la versione JSON quale è il modo migliore di leggere da un file JSON generato da una pagina PHP per visualizzare i miei risultati.Il modo migliore per visualizzare i dati tramite JSON utilizzando jQuery

so che includerei uno .each da eseguire attraverso di esso per visualizzarli tutti.

+0

Coughlin/Ryan, modificare la tua domanda per riflettere la discussione qui sotto. La sezione di risposta non è progettata per la discussione (piuttosto usa i commenti a tale scopo o aggiorna la tua domanda con ulteriori dettagli). –

risposta

26

Qualcosa di simile a questo:

$.getJSON("http://mywebsite.com/json/get.php?cid=15", 
     function(data){ 
      $.each(data.products, function(i,product){ 
      content = '<p>' + product.product_title + '</p>'; 
      content += '<p>' + product.product_short_description + '</p>'; 
      content += '<img src="' + product.product_thumbnail_src + '"/>'; 
      content += '<br/>'; 
      $(content).appendTo("#product_list"); 
      }); 
     }); 

vorrebbe un oggetto JSON fatto da un array PHP restituita con la chiave dei prodotti. per esempio:

Array('products' => Array(0 => Array('product_title' => 'Product 1', 
            'product_short_description' => 'Product 1 is a useful product', 
            'product_thumbnail_src' => '/images/15/1.jpg' 
            ) 
          1 => Array('product_title' => 'Product 2', 
            'product_short_description' => 'Product 2 is a not so useful product', 
            'product_thumbnail_src' => '/images/15/2.jpg' 
            ) 
         ) 
    ) 

Per ricaricare l'elenco che si sarebbe semplicemente fare:

$("#product_list").empty(); 

E poi chiamare di nuovo getJSON con nuovi parametri.

+2

Per motivi di prestazioni, $ (content) .appendTo ("# product_list") dovrebbe essere al di fuori del ciclo. L'aggiunta al DOM è lenta e dovrebbe essere eseguita una sola volta. –

+0

Sì, è così che dovrebbe essere, e la prima riga dovrebbe essere contenta + = se sarà così. Tuttavia aggiungendo al DOM è più veloce in alcuni browser rispetto ad altri :) – Jay

10

JQuery ha un tipo di dati JSON integrato per Ajax e converte i dati in un oggetto. PHP% ha anche una funzione json_encode incorporata che converte una matrice in una stringa json. Salva un sacco di sforzi di analisi e decodifica.

3

È possibile creare un oggetto jQuery da un oggetto JSON:

$.getJSON(url, data, function(json) { 
    $(json).each(function() { 
     /* YOUR CODE HERE */ 
    }); 
}); 
4

Perfetto! Grazie Jay, qui di seguito è il mio HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>Facebook like ajax post - jQuery - ryancoughlin.com</title> 
<link rel="stylesheet" href="../css/screen.css" type="text/css" media="screen, projection" /> 
<link rel="stylesheet" href="../css/print.css" type="text/css" media="print" /> 
<!--[if IE]><link rel="stylesheet" href="../css/ie.css" type="text/css" media="screen, projection"><![endif]--> 
<link href="../css/highlight.css" rel="stylesheet" type="text/css" media="screen" /> 
<script src="js/jquery.js" type="text/javascript" charset="utf-8"></script> 
<script type="text/javascript"> 
/* <![CDATA[ */ 
$(document).ready(function(){ 
    $.getJSON("readJSON.php",function(data){ 
     $.each(data.post, function(i,post){ 
      content += '<p>' + post.post_author + '</p>'; 
      content += '<p>' + post.post_content + '</p>'; 
      content += '<p' + post.date + '</p>'; 
      content += '<br/>'; 
      $(content).appendTo("#posts"); 
     }); 
    }); 
}); 
/* ]]> */ 
</script> 
</head> 
<body> 
     <div class="container"> 
       <div class="span-24"> 
         <h2>Check out the following posts:</h2> 
         <div id="posts"> 
         </di> 
       </div> 
     </div> 
</body> 
</html> 

E il mio JSON uscite:

{ posts: [{"id":"1","date_added":"0001-02-22 00:00:00","post_content":"This is a post","author":"Ryan Coughlin"}]} 

ottengo questo errore, quando ho eseguito il mio codice:

object is undefined 
http://localhost:8888/rks/post/js/jquery.js 
Line 19 
+0

ho preso, ho cambiato: \t \t $ .each (data.posts, la funzione (i, post) { Così data.post -> Dati .posts – Coughlin