【问题标题】:json response datajson响应数据
【发布时间】:2012-01-09 04:40:00
【问题描述】:

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

从上表中,我使用这个 jQuery 代码检索图像 url:

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

这是从 jQuery ajax 获取请求的 php 代码:

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

代码会很有用。

【问题讨论】:

  • 不确定反斜杠是怎么回事,但就创建新的&lt;img&gt; 元素而言,如果data 是一个数组,则使用for 循环或jQuery 的@987654321 循环遍历它@ 一次处理一个数组的元素。
  • 我用 alert(typeof(data));它给出了字符串
  • 你有一堆问题已经得到解答,显然对你有所帮助,但你还没有accepted them。请做其他人可能不愿意帮助你的事情。
  • 你试过在你的while循环中使用strip_slashes($row['imgurl'])吗?
  • @Sathya thanx 我标记了对我有帮助的答案

标签: php jquery mysql json


【解决方案1】:

斜线应转义,并且根据http://json.org 的规范有效。请注意,即使仅使用 Firebug:

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

评估为:

"images/zara/shoes/thumbnail"

...所以这没什么好担心的。

是的,您可以使用标准 for 循环或较新浏览器中可用的 Array.forEach 函数循环遍历每个元素,然后只需为结果中返回的每个缩略图调用 append 函数。

【讨论】:

  • 我用 alert(typeof(data));它现在给出了字符串如何遍历该字符串或将其转换为数组
  • 我像这样解析它 var object = $.parseJSON(data);然后打印它 $('#pgwrapid').html(object.[0]);但在控制台给出错误
  • object.[0]?不应该只是object[0]吗??
  • 现在这个错误 JSON.parse: unexpected character [Break On This Error] return window.JSON.parse(data);
【解决方案2】:

您从 PHP 代码收到的 data 是一个包含 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]));
}

你会得到一个附加的数据列表——让它成为一个可点击的图像不需要更多的工作,但你知道下一步该做什么:-)

【讨论】:

  • 我的控制台在解析 JSON.parse 时出现错误:意外字符 [Break On This Error] return window.JSON.parse(data);
  • 使用 jQuery ajax 调用它应该自动解析 JSON,假设它实际上是有效的 JSON。问题中的代码将数据类型设置为“json”。
【解决方案3】:

您的 ajax 调用有两个错误:

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

在此之后,您应该检查答案。并编写一个循环来创建您想要的图像元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 2016-05-11
    • 1970-01-01
    相关资源
    最近更新 更多