json_encode 创建格式错误的 JSON 数据?

2024-05-16

我有一个 codeigniter 应用程序将一些数据从数据库返回到视图。我正在尝试将其作为 json 数据发送回来。

问题是返回的数据格式错误。 它看起来像这样:

 ({'2.5':"Admin1", '2.10':"Admin2"})

当我在 jsonlint.com 上测试它时,它表明这不是有效的 json。 '2.5' 应该用双引号引起来,而不是单引号引起来。 我不明白的是,在将数据传递给视图之前,我正在对数据调用 json_encode 。我的控制器中的代码如下所示:

public function getbuildings()
{

        $buildings = array();
        $branchID = $this->uri->segment(3);
        $buildingforbranch = array();
        $_locations = $this->racktables_model->get_locations(); 
        //print_r($_locations);

        foreach ($_locations as $location)
        {
            if ((isset($location['L2FullID'])) && (!array_key_exists($location['L2FullID'],$buildings))) {
                $buildings[$location['L2FullID']] = $location['L2Location'];            
            }
        }

        foreach ($buildings as $key => $value)
        {

            $pattern = "/(".$branchID."\.\d)/i";            
            if (preg_match($pattern,$key))
            {
                $buildingforbranch[(string)$key] = $value;
            }

        }       
        header ('Content-Type: application/json; charset=UTF-8');
               echo json_encode($buildingforbranch);  

}

正如您从代码中看到的,我什至尝试将 $key 显式转换为字符串数据类型。但这似乎并没有改变任何事情。有什么建议么? 谢谢。

EDIT 1

当我在 header / json_encode() 调用之前对 $buildingforbranch 进行 var 转储时,我得到以下结果:

array(3) {
  ["2.5"]=>
  string(7) "Admin 2"
  ["2.10"]=>
  string(7) "Admin 1"
  ["2.11"]=>
  string(3) "SB4"
}

这里看起来不错...但是当我执行 console.log() 并从控制器传入数据时,浏览器显示格式不正确的 json 数据。

EDIT 2这就是我想要实现的目标。当用户单击页面上的控件时,我需要动态创建一个组合框。如果 ajax 调用产生空数组,我不想显示组合。否则,我尝试使用 ajax 调用的结果填充组合框。一切正常,除了我尝试检查 json 数据长度的部分。无论发回什么内容,我的应用程序始终显示一个组合框。

这是代码:

$.ajax({
                        url:"<?php echo site_url('switches/getbuildings/');?>" + "/" + $selectedvalue,
                        type:'GET',
                        dataType:'json',
                        success: function(returnDataFromController) {
                               console.log("getbuildings ajax call successfull");
                                var htmlstring;
                                htmlstring="<select name='L2Locations' id='L2Locations'>";
                                htmlstring = htmlstring + "<option value='all'>All</option>";

                                //console.log(returnDataFromController);
                                 var JSONdata=[returnDataFromController];
                                 console.log(JSONdata);
                                 if (JSONdata.length != 0) 
                                 {
                                        for(var i=0;i<JSONdata.length;i++){
                                        var obj = JSONdata[i];

                                                  for(var key in obj){
                                                         var locationkey = key;
                                                         var locationname = obj[key];
                                                         htmlstring = htmlstring + "<option value='" + locationkey + "'>" + locationname + "</option>";
                                                    } //end inner for


                                                $('#l2locations').html(htmlstring);

                                        }//end outer for
                                    }

                                    else {
                                        //alert('i think undefined');
                                        $('#l2locations').html('');
                                    }

                            }//success


                    });//end ajax

如果我调用直接返回 json 数据的页面,我会得到 [] 作为空数组的结果。


[] 实际上在您的特定情况下定义了一个包含单个元素的数组。但据我所知,您正在使用 jQuery ajaxdataType: "json",这意味着返回值已经是一个对象了,不需要再解析一次,所以直接去掉[]即可:

var JSONdata=returnDataFromController; // instead of var JSONdata=[returnDataFromController];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

json_encode 创建格式错误的 JSON 数据? 的相关文章

  • 如何将表中不存在但原始SQL中存在的实体字段设置为别名?

    假设我们有一个这样的查询 SELECT CUSTOM EXPRESSION as virtualfield FROM users 用户的实体本身具有 虚拟字段 但映射注释没有 因为表没有该字段 假设它作为原始 SQL 执行 我们如何使用上面
  • html 选择列表 - 通过传入变量获取文本值?

    我有一个显示列表语言的选择列表
  • jQuery Datatable:分页和过滤器显示不正确

    我不知道如何解决这个问题 尝试了一整天但没有成功修复分页 我正在使用 jQuery 数据表 并且为了显示我的大量数据 我正在使用服务器端 作为测试 仅调用表中的 10 行数据 然后在传递到表之前 我重组了里面的数据dataSrc 使用这个解
  • PHP 中标头的使用

    非常简单的问题 这两个 PHP 版本 5 标头调用中哪一个是 最好的 header Not Modified true 304 header HTTP 1 1 304 Not Modified 我很确定第一个是最多价的 但只是好奇如果在 H
  • 使用 jQuery 从 CKEditor 的 iframe 中获取内容

    我有一个自定义编写的 CMS 它使用CKEditor http ckeditor com FCKEditor v3 用于编辑内容 我也在使用jQuery 验证 http bassistance de jquery plugins jquer
  • 如何在 Windows 上安装 Zend 框架

    安装 Zend Framework 就是这么简单 是的 对 好吧 我正在写一本初学者的书 有一件不太详细的事情是最重要的部分 安装该死的东西 浏览了几个小时的快速入门指南后 它只说 下载 Zend 添加包含目录 bla bla 然后就完成了
  • Nginx 502 网关错误。通过增加buffer来解决。为什么?

    我正在设置 LEMP 堆栈来运行 Drupal 我安装了 Nginx 和 PHP FastCGI Nginx 工作正常 但任何运行 PHP 的尝试都会出现错误 502 Bad Gateway 谷歌很快发现 nginx 502 错误网关 ht
  • 使用 PHP 从 Mongo 解码 JSON

    我已经看过这个线程 PHP 解码嵌套 JSON https stackoverflow com questions 3555335 php decode nested json并没有设法用它来解决我的问题 我目前正在从 Mongo 获取 J
  • PHP 编码风格回归;在开关/外壳中

    我们正在尝试为我们的团队实施新的编码风格指南 当未找到 break 时 php codeniffer 会在 switch case 语句上打印警告 如下所示 switch foo case 1 return 1 case 2 return
  • 带有淘汰赛js的隐形recaptcha

    我正在完成隐形验证码 但我在实现它时遇到问题 谷歌开发人员页面中的代码显示它应该是这样的
  • 如何使用更新资源控制器 laravel 4?

    我有带有索引 编辑 更新方法的客户控制器 Route resource customer CustomerController 控制器方法更新 public function update id echo id 我的 HTML 表单
  • 如何处理 REST api 中的 php 通知、警告和错误?

    在 REST API 中 200 响应表明操作成功 PHP 默认情况下直接在响应正文中输出错误消息 而不更改响应代码 在 SPA 中 用户无法直接看到响应文本 因此 当应用程序未按预期工作时 我通过 FireBug 检查响应正文 以检查可能
  • PHP 接口有属性吗?

    PHP 中的接口有属性 还是只有方法 您可以在 DocBlock 中为接口声明属性 然后 IDE 将提示接口的这些属性 PhpStorm 会这样做 但这不会强制在实现类中实际实现这些字段 例如 property string passwor
  • 如何解决 Typescript 构建中的错误“找不到模块 'jquery'”

    我目前在 ts 文件的顶部有这个import require jquery 我这样做是因为我试图在我的打字稿文件中使用 jquery 但我似乎无法编译它 因为它返回标题中所述的错误 我正在使用 ASP NET CORE 脚本文件夹 tsco
  • Javascript split 不是一个函数

    嘿朋友们 我正在使用 javascript sdk 通过 jQuery facebook 多朋友选择器在用户朋友墙上发布信息 但是我收到此错误friendId split 不是函数 这是我的代码 function recommendToFr
  • 使用会话 php 创建 cookie?

    我使用会话来登录我网站中的用户 问题是 我想让用户remember密码 因此关闭 打开浏览器后他们不需要再次登录 我需要使用 cookie 和 session 来实现它吗 my code user POST user pass POST p
  • 矩形超出边界是什么意思

    PPB Graphics2D PaintImageData 矩形超出界限是什么意思 我几乎在我检查的每一段代码中都看到了它 最新的代码是 define my consumer key define my consumer secret oa
  • Chrome//kendoUI/jQuery:超出最大调用堆栈大小

    我正在使用 hottowell 模板来创建 spa 应用程序 并且我从 jquery 中收到了一个很好的错误 基本上我的问题从此刻开始尝试绑定我的视图 viewModelBinder js 来自 durandal 库 viewModelBi
  • 在 CKEditor 中设置字体大小和字体系列

    我正在使用 ckeditor 我想问一下这个插件如何设置font family和font size 我尝试过使用 CKEDITOR config font defaultLabel Arial CKEDITOR config fontSiz
  • 循环内的异步性

    我正在使用 jQuery getJSON 用于从一组实用程序的给定 URL 检索数据的 API 我真的很想找到一种为每个实用程序重用代码 完全相同 的方法 由于循环的执行与 ajax 调用无关 因此我无法找到保留循环值的方法 我知道这个描述

随机推荐