【问题标题】:remove quotes from json_encode keys从 json_encode 键中删除引号
【发布时间】:2014-02-17 15:26:41
【问题描述】:

我是 jquery 的新手,我正在尝试使用 Jquery UI 创建一个自动完成功能。我还在学习,所以我确信我的代码可能会更好,但这只是一个开始。 我遇到了一个问题,jquery 在 json 键周围加上引号。我查看了 stackoverflow,但似乎找不到解决方案,所以我认为值得一问,因为我很好并且真正卡住了。我认为它我的 php 一定有问题。

{"value":"Managerial Accountants","id":"5929"}

我希望我的输出是这样的”

{value:"Managerial Accountants",id:"5929"}

这是我的其余代码:

 <script>
 jQuery(function(){
 jQuery(function () {
   var checkboxval;
   var availableTags = [
 <?php
// Database Connection
 error_reporting(-1);
 ini_set('display_errors', 'On');

 $con=mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);

 $q="SELECT name as value,term_id as id FROM 7terms WHERE term_id not in 
     (select   parent from 7term_taxonomy) and term_id in (select term_id from   
     7term_taxonomy where  taxonomy='cat')";

$r = mysqli_query($con, $q);            

$city_state = array();
while($row = mysqli_fetch_assoc($r)){


 $rows[]=$row;
}
$json = json_encode($rows,true);
echo $json;
 ?>

];

//set autocomplete search
set_autocomplete_search("tags");
set_autocomplete_search("tags1");
set_autocomplete_search("tags2");

function set_autocomplete_search(p_tags) {
    var temp_p_tags = "#" + p_tags;
    jQuery(temp_p_tags).autocomplete({
        source: availableTags,
        select: function (event, ui) {
            var txtbx1 = (ui.item.name);
            var catid = (ui.item.id);
            alert(catid);
            jQuery(temp_p_tags).val(txtbx1);
            var tags = jQuery(temp_p_tags).val(txtbx1);
            //var checkboxval = "";
            checkboxval = tags.val();




            jQuery("#" + checkboxval + "").prop("checked", true);



        },
        change: function () {
            //alert("changed detected");
            //$("#" + checkboxval + "").prop("checked", false);
        }
    }).blur(function(event) {
            event.stopPropagation();
            event.preventDefault();

            //uncheck all checkboxes first
            jQuery(".test input:checked").each(function() {
                jQuery(this).attr("checked", false);
            });

            //set checkbox
            var checkbox_tags = jQuery("#tags").val();
            jQuery("#" + checkbox_tags + "").prop("checked", true);

            var checkbox_tags1 = jQuery("#tags1").val();
            jQuery("#" + checkbox_tags1 + "").prop("checked", true);

            var checkbox_tags2 = jQuery("#tags2").val();
            jQuery("#" + checkbox_tags2).prop("checked", true);
        });
   }
 });
});//]]>  

感谢您抽出宝贵时间。非常感谢我能在这方面获得的任何帮助,因为我还有很多东西要学,并且已经坚持了几天。

【问题讨论】:

  • 没有错,事情应该是这样的,因为JSON就是这样。如果您希望输出看起来像其他东西,那么您正在尝试以完全不合适的方式解决问题(您没有提及)。
  • 您想要的输出不是有效的 JSON。如果出于某种原因您需要那种精确格式的输出,您需要使用自己的函数来创建它。
  • 我需要它以这种格式出现的原因是,如果键周围有引号,则自动完成不起作用。那么,我的 jquery 脚本一定有问题吗?
  • @LaurieWilliams:你怎么知道的?您是否删除了引号并看到它在之后工作?
  • @jon.Yes.我输入了一些硬编码的值,如下所示: avalibaletags[{value:"Managerial Accountants",id:"5929"}] 并且自动完成工作。因为我在它停止工作的键周围有引号。

标签: php jquery mysqli


【解决方案1】:

您遇到此问题是因为您没有正确使用 json。

您仍然可以将 json_encode() 回显到 JS 变量中,但去掉 [] 括号,然后使用 .parseJSON() 来获取您需要的内容:

var availableTags = $.parseJSON('<?php
    // Database Connection
    error_reporting(-1);
    ini_set('display_errors', 'On');

    $con=mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);

    $q="SELECT name as value,term_id as id FROM 7terms WHERE term_id not in 
         (select   parent from 7term_taxonomy) and term_id in (select term_id from   
         7term_taxonomy where  taxonomy='cat')";

    $r = mysqli_query($con, $q);            

    $city_state = array();
    while($row = mysqli_fetch_assoc($r))
    {
        $rows[]=$row;
    }
    echo json_encode($rows,true);
?>');

此解决方案应该可以帮助您,但我建议您选择基于 AJAX 的解决方案,其中您的查询位于 PHP 文件中并使用 AJAX 调用它,因为 $.ajax() 可以自动转换 JSON只要您设置dataType: 'json',就可以将字符串转换为格式正确的数组/对象

【讨论】:

  • 这是对的。谢谢,我得到了方括号,所以 json 没有问题。非常感谢@MonkeyZeus
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 2021-05-04
相关资源
最近更新 更多