我很确定我错过了一些简单的东西,无论如何,我在过去三个小时里尝试过JSON编码一些查询结果,我经常使用代码点火器这样做,但是,它只是不起作用,我不明白为什么。
我正在使用CodeIgniter(最新版本),PHP5。
我的三个档案。
material_model MODEL
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,只有几个字段来自table material_types,但没有运气,这也是我正在工作的新服务器在这,这不太可能是问题,但我认为值得一提。
感谢。
答案 0 :(得分: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>
代表byte order mark。由于它们中有三个,因此CI项目中的三个文件中包含字节顺序标记。我建议像PSR2一样,始终禁用PHP代码中的字节顺序标记。您的编辑器应该可以选择删除/禁用它们。一旦你这样做,你应该能够解析json。
答案 1 :(得分: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
}
}