【问题标题】:Jquery : JSON changes string of pathJquery:JSON更改路径字符串
【发布时间】:2011-07-05 04:40:26
【问题描述】:

我正在尝试从我的数据库中获取图像路径列表,并在 Jquery 和 Json 的帮助下尝试添加到我的网站。但是我在 php 中不使用t know why after encoding my string usingjson_encode`,它会改变它的路径并向我显示

[{"0":"user\/photogallery\/images\/members\/2\/2_1.jpg","src":"user\/photogallery\/images\/members\/2\/2_1.jpg"},{"0":"user\/photogallery\/images\/members\/2\/2_2.jpg","src":"user\/photogallery\/images\/members\/2\/2_2.jpg"}]

我只需要user/photogallery/images/members/2/2_2.jpg 部分来创建新的<img src ="user/photogallery/images/members/2/2_2.jpg " /> 组件。

这是我的 php 代码和脚本

$member_id  = $GET['member_id'];
$files      = find_all_photos($member_id);

$encoded    = json_encode($files);
echo $encoded;
unset($encoded);

 function find_all_photos($id)
    {
      db_connect();

    $query = sprintf("SELECT src FROM photo_album_list WHERE user_id = '%s'", 
                           mysql_real_escape_string($id)); 

        $result = mysql_query($query);

        $result = db_result_to_array($result);

        return $result;
    }


    function db_result_to_array($result)
    {
        $res_array = array();

    for ($count=0;  $row = mysql_fetch_array($result); $count++)
    {
      $res_array[$count] = $row;
    }

        return $res_array;

    }

还有脚本

$.get('photostack.php', {member_id:2} , function(data) {
                        console.log(data);
                        var items_count = data.length;
                        for(var i = 0; i < items_count; ++i){
                            var item_source = data[i];
                            var cnt         = 0;
                            $('<img />').load(function(){
                                var $image = $(this);
                                ++cnt;
                                resizeCenterImage($image);
                                $ps_container.append($image);
                                var r       = Math.floor(Math.random()*41)-20;
                                if(cnt < items_count){
                                    $image.css({
                                        '-moz-transform'    :'rotate('+r+'deg)',
                                        '-webkit-transform' :'rotate('+r+'deg)',
                                        'transform'         :'rotate('+r+'deg)'
                                    });
                                }
                                if(cnt == items_count){
                                    $loading.remove();
                                    $ps_container.show();
                                    $ps_close.show();
                                    $ps_overlay.show();
                                }
                            }).attr('src',item_source);
                        }
                    },'json');

【问题讨论】:

  • PHP 问题比 jQuery 问题要多得多。我已经添加了 PHP 标记,您可以考虑删除 jQuery 标记。
  • 你是从服务器端得到它的吗?查看控制台上的响应
  • 是的,这是重复的问题,但我也有一个问题。在我的路径中,它还会创建类似 "0":"user\/photogallery\/images\/members\/2\/2_1 .jpg","src":"user\/photogallery\/images\/members\/2\/2_1.jpg" 为什么不只是 src ?什么是 0?它也会重复。
  • 重复可能是因为mysql_fetch_array() 的结果被定义为MYSQL_BOTH(默认)。来自php.net/manual/en/function.mysql-fetch-array.php - “通过使用 MYSQL_BOTH(默认),您将获得一个包含关联索引和数字索引的数组。”

标签: php jquery string json parsing


【解决方案1】:

听起来您很烦恼在路径中的斜杠之前添加了反斜杠。完全同意这是非常奇怪(没有必要“转义”JSON字符串中的斜杠),但在大多数符号中,转义一个不需要转义的字符是无害的没有特殊的转义含义。 (也就是说,逃逸/ 是无害的,即使它不需要它,但逃逸n 显然不是无害的,即使它并不意味着它,因为\n 意味着什么)。

在我看来,JSON page 对如何处理无效转义保持沉默,但Crockford's own parser 允许它们(忽略不必要的反斜杠),所以...(Crockford 是 JSON 的发明者。)

【讨论】:

    【解决方案2】:

    转义的反斜杠可能以这种方式存储在数据库中,因此您的 JSON 字符串只是逐字提取它们。如果你想删除它们,你需要在returnjson_encode() 它们之前处理从数据库返回的字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      • 1970-01-01
      • 2013-11-25
      • 2022-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多