1

我很确定我错过了一些简单的东西,无论如何,在过去的三个小时里我已经尝试过对一些查询结果进行 JSON 编码,我经常使用代码点火器来做这件事,但是,它就是行不通,而且我不知道为什么。

我正在使用 CodeIgniter(最新版本),PHP5。

我的三个文件。

材料模型模型

public function get_types(){
    return $this->db->query("SELECT * FROM material_types ORDER BY type_id")->result_array();
} // end function get_types

public function get_material($name){
    return $this->db->query("SELECT T.name as 'type', M.* FROM material M, material_types T WHERE T.type_id = M.type_id and T.name = '".$name."' ORDER BY M.type_id and M.order")->result_array();
} // end function get_material_all

物料控制器

public function get_all(){
    $json['response'] = array('types' => array());
    $json['response']['types'] = $this->material_model->get_types();


    foreach ($json['response']['types'] as $item){
    $name = $item['name'];

    $json['response'][$name] = $this->material_model->get_material($name);          
    }

    $this->load->view('response', $json);
}

响应视图

$this->output->set_status_header(200);
$this->output->set_header('Content-type: application/json');
echo json_encode($response);

结果-> http://goethedev.com/iib_ci/index.php/material/get_all/

我用来验证 JSON 页面的内容 -> http://jsonformatter.curiousconcept.com/

我在上面显示了整个结果,我已经尝试将其缩小以进行测试,只限于 row_array,表 material_types 中只有几个字段,但没有运气,这也是我正在开发的新服务器,那就是不太可能是问题,但我认为值得一提。

谢谢。

4

2 回答 2

2

从您提供的 URL 返回的 json 正在为我显示得很好,并且它也可以验证。或者您在发布后已经修复它,或者您可能需要清除浏览器缓存?

更新

当我将代码复制/粘贴到您提供的验证器时,代码验证得很好,但使用 URL 失败。这告诉我,从浏览器复制/粘贴时不包含额外/错误的内容。

为了识别它,我跑了curl http://goethedev.com/iib_ci/index.php/material/get_all/ | less,这就是我得到的:

<U+FEFF><U+FEFF><U+FEFF>{"types":[{"type_id":"0","name":"DISCLAIMER","timestamp":"2012-09-08 22:57:27"},

<U+FEFF>表示字节顺序标记。由于其中有三个,因此您的 CI 项目中的三个文件似乎包含字节顺序标记。我建议和PSR2一样,始终禁用 PHP 代码中的字节顺序标记。您的编辑器应该可以选择删除/禁用它们。一旦你这样做了,你应该能够解析 json。

于 2012-09-09T22:25:29.647 回答
1

json看起来不错,但你也可以试试这个

public function get_all(){
    $response['types'] = $this->material_model->get_types();
    foreach ($response['types'] as $item){
        $response['name'][] = $this->material_model->get_material($item['name']);          
    }
    $this->load->view('response', array($response));
}

在客户端尝试

xhr.onload = function(e){
    var jsonObject = JSON.parse(xhr.responseText);
    if (jsonObject != null)
    {
        console.log(jsonObject); // see in the console if it prints anything
        Ti.API.info(...); // rest of your code
    }
}

如果这有帮助

于 2012-09-09T23:03:01.033 回答