2012-01-09 157 views
0
我有我的JSON问题

检索到的数据请到通过整个代码JSON响应数据

这是我的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 | 
+-------------------------------+ 

从上表IM检索图像的URL与这个jQuery代码:

$(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); 
        } 
     }); 
    }); 
}); 

这是PHP代码,其从jQuery AJAX请求得到:

<?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); 

?> 

现在,会发生什么,这是输出在下面的jQuery选择:

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

输出

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

我的问题是:

  1. 为什么反斜杠这里?
  2. 是否有任何代码遍历上面的输出,并提取每个路径,并将其插入图像标签是这样的:

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

代码将是有用的。

+0

不知道反斜杠是怎么回事,但就创建新''元素而言,如果data是一个数组,然后使用'for'循环或jQuery [泛型迭代器函数'$。 each()'](http://api.jquery.com/jQuery.each/)每次处理一个数组的元素。 – nnnnnn 2012-01-09 04:46:07

+0

我用alert(typeof(data))检查了它;它给出字符串 – sajid 2012-01-09 04:49:42

+0

你有一堆已经回答的问题,显然对你有帮助,但是你没有[接受](http://u.sbhat.me/t6SXUH)。其他人也许不会倾向于帮助你。 – Sathya 2012-01-09 04:59:56

回答

0

斜线预计会漏掉,并且在http://json.org的每个规范中都有效。请注意,即使仅通过使用Firebug:

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

计算结果为:

"images/zara/shoes/thumbnail" 

...所以这没有什么可担心。

是的,您可以使用新的浏览器中的标准for循环或Array.forEach函数遍历每个元素,并简单地为结果中返回的每个缩略图调用附加函数。

+0

我用alert(typeof(data))检查了它;它现在给字符串如何循环该字符串或将其转换为数组 – sajid 2012-01-09 04:50:52

+0

@sajid - http://api.jquery.com/jQuery.parseJSON/ – ziesemer 2012-01-09 04:51:52

+0

我解析它像这样var object = $ .parseJSON(data);然后打印$('#pgwrapid')。html(object。[0]);但是在控制台 – sajid 2012-01-09 05:04:23

0

data您从PHP代码中收到的是一个包含JSON的字符串 - 而PHP JSON转义了斜线 - 这是有效的。

您需要的JSON字符串解码等等,如改变

$('#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])); 
} 

的东西,你将获得附加数据的列表 - 没有更多的工作,使它是一个可点击的图像,但你知道下一步该做什么:-)

+0

我的控制台给解析错误JSON.parse:意外的字符[Break On This Error] return window.JSON.parse(data); – sajid 2012-01-09 05:14:17

+0

使用jQuery ajax调用它应该自动解析JSON,假设它实际上是有效的JSON。问题中的代码将数据类型设置为'json'。 – nnnnnn 2012-01-09 06:12:16

0

你的ajax调用有两个错误:

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

之后,你应该检查答案。然后编写一个循环,在您想要的位置创建图像元素。