2012-01-09 6 views
0

Je suis un problème avec mon JSON récupéré les données s'il vous plaît passer par le code toutdonnées de réponse JSON

Voici ma table MySQL:

mysql> select imgurl from images where family="shoes"; 
+-------------------------------+ 
| imgurl      | 
+-------------------------------+ 
| images/zara/shoes/thumbnail | 
| images/hermes/shoes/thumbnail | 
| images/hermes/shoes/thumbnail | 
| images/hermes/shoes/thumbnail | 
+-------------------------------+ 

de la table ci-dessus im récupérer l'image urls avec ce jQuery code:

$(document).ready(function() { 
    $('ul.sub_menu a').click(function() { 
      $('#sliderid, .prodcls').fadeOut(4000); 
       var txt = $(this).text(); 
       $.ajax({ 
        type: 'POST', 
        url: 'thegamer.php', 
        data: {send_txt: txt}, 
        datatype:'json', 
        success: function(data){ 
         $('#pgwrapid').html(data); 
        } 
     }); 
    }); 
}); 

Voici le code php qui obtient la demande de la ajax jQuery:

<?php 
//Credentials 
$server = "localhost"; 
$user = "root"; 
$db = "lemonx"; 

//Connect 
$link = mysql_connect($server, $user); 
//Select database 
mysql_select_db($db, $link); 

//Assemble query 
$family = mysql_real_escape_string($_REQUEST['send_txt'], $link); 
$query = "SELECT imgurl FROM images WHERE family='$family'"; 

//Query database 
$result = mysql_query($query, $link); 

//Output result, send back to ajax as var 'response' 

$imgurl=array(); 
$i=0; 
if(mysql_num_rows($result) > 0){ 
    //Fetch rows 
    while($row = mysql_fetch_array($result)){ 
     $imgurl[$i] = $row['imgurl']; 
     //echo $imgurl[$i]; 
     $i+=1; 
     } 
} 
echo json_encode($imgurl); 

?> 

Maintenant, ce qui se passe que c'est sortie au-dessous sélecteur jQuery:

$('#pgwrapid').html(data); 

SORTIE

["images\/zara\/shoes\/thumbnail","images\/hermes\/shoes\/thumbnail","images\/hermes\/shoes\/thumbnail"] 

Mes problèmes sont:

  1. Pourquoi la barre oblique inverse ici?
  2. Y at-il un code à boucle sur la sortie ci-dessus et extraire chaque chemin et l'insérer dans balise image comme ceci:

    $('#pgwrapid').append("&lt;img src='"imagepath"' alt='Thumbnail'/&gt;"); 
    
code

sera utile.

+0

Vous ne savez pas quoi faire avec les barres obliques, mais pour créer de nouveaux éléments '', si 'data' est un tableau, faites-le passer en boucle en utilisant une boucle' for' ou jQuery [fonction générique d'itérateur '$. each() '] (http://api.jquery.com/jQuery.each/) pour traiter les éléments du tableau un à la fois. – nnnnnn

+0

je l'ai vérifié avec l'alerte (typeof (données)); cela donne une chaîne – sajid

+0

Vous avez un tas de questions qui ont été répondues et qui vous ont évidemment aidé, mais vous ne les avez pas acceptées (http://u.sbhat.me/t6SXUH). S'il vous plaît faites d'autres personnes peuvent ne pas être enclins à vous aider. – Sathya

Répondre

0

Les barres obliques sont censées s'échapper et sont valides conformément à la spécification http://json.org. Notez que même en utilisant simplement Firebug:

"images\/zara\/shoes\/thumbnail" 

est évaluée à:

"images/zara/shoes/thumbnail" 

... c'est donc rien à se préoccuper.

Oui, vous pouvez boucler chaque élément à l'aide d'une boucle for standard ou de la fonction Array.forEach disponible dans les navigateurs récents, et appeler simplement votre fonction d'ajout pour chaque vignette renvoyée dans le résultat.

+0

je l'ai vérifié avec l'alerte (typeof (données)); il donne une chaîne maintenant comment faire une boucle sur cette chaîne ou la convertir en tableau – sajid

+0

@sajid - http://api.jquery.com/jQuery.parseJSON/ – ziesemer

+0

Je l'analyse comme ceci var object = $ .parseJSON (data); puis en l'imprimant $ ('# pgwrapid'). html (objet. [0]); mais donnant une erreur à la console – sajid

0

Le data que vous recevez de votre code PHP est une chaîne contenant le JSON - et le PHP JSON échappe les barres obliques - ce qui est valide.

Vous devez décoder la chaîne de texte JSON donc, quelque chose comme changer

$('#pgwrapid').html(data); 

à

var listofshoes = JSON.parse(data); // note this the data you were having in .html(data) 
for (var i in listofshoes) { 
    $('#pgwrapid').append($("<p>").text(listofshoes[i])); 
} 

Et vous obtiendrez une liste des données ajoutées - pas beaucoup plus de travail à faire une image cliquable, mais vous savez quoi faire ensuite :-)

+0

ma console donne une erreur avec l'analyse JSON.parse: caractère inattendu [Break On This Error] return window.JSON.parse (data); – sajid

+0

Avec un appel jQuery ajax, il devrait analyser le JSON automatiquement, en supposant qu'il soit réellement JSON valide. Le code de la question définit le type de données sur 'json'. – nnnnnn

0

Votre appel ajax a deux erreurs:

- method: 'post' (instead of type: 'POST') 
- dataType: 'json' (instead of datatype:'json') 

Après cela, vous devriez vérifier la réponse.Et écrivez une boucle qui crée les éléments d'image où vous voulez.