1

我有一个 PHP 脚本,它对 DB 进行查询并将结果作为 JSON 数据返回。该文件包含一些 Codeigniter 特定的功能。

该函数接收 id 并将表中的一些数据返回给 JS 代码。

public function get_l($id){
//$id is not empty variable
$this->db->where('id',$id);
$q=$this->db->get('news');

$res = $q->result_array();

$this->output->set_header("HTTP/1.0 200 OK");
$this->output->set_header("HTTP/1.1 200 OK");
$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate");
$this->output->set_header("Cache-Control: post-check=0, pre-check=0");
$this->output->set_header("Content-Type: application/json; charset=utf-8");
$this->output->set_header("Pragma: no-cache");

$out = json_encode($res);
$this->output->set_output($out);
}

然后我需要使用下一个 JS 代码处理该 JSON:

function getContent(id){
  $.post('/admin_ajax/news/get',
  {
    id: id

  },
  function(result)
  {
    alert(result+"\n"+result.length);//this will output [object Object] 1
    for (var key in result)
    {
      alert(key+':'+result[key]); //and this 0:[object Object]
    }
    alert(result.title); //here we are getting undefined
  },
  'json'
);

我没有在控制台中收到错误或警告。在萤火虫中,我看到了从服务器返回的内容。

HTTP 标头:

Server  nginx/1.1.19
Date    Fri, 26 Oct 2012 11:59:12 GMT
Content-Type    application/json; charset=utf-8
Content-Length  85
Connection  keep-alive
X-Powered-By    PHP/5.3.10-1ubuntu3.4
Cache-Control   post-check=0, pre-check=0
Pragma  no-cache

和回应:

[{"id":"5","title":"test","alias":"test","content":"tes","date":"123","type":"test"}]

JSON:

alias  "test"

content "tes"

date  "123"

id "5"

title "test"

type "test"

我在这里发现了一个类似的问题,但没有帮助。

4

3 回答 3

3

您的 JSON 对象位于数组 [...] 中,因此长度为 1。

function(result) {
    var jsonObj = result[0];
于 2012-10-26T12:21:45.123 回答
1

结果是一个包含一个元素的数组:

[
    {
        "id": "5",
        "title": "test",
        "alias": "test",
        "content": "tes",
        "date": "123",
        "type": "test"
    }
]

索引 0 处的元素包含您需要的信息。你需要做:

alert(result[0].id);
alert(result[0].title);
alert(result[0].alias);
于 2012-10-26T12:20:48.847 回答
1

看起来您得到的响应实际上是一个包含一个元素(json 对象)的数组。

尝试使用result[0],如下所示:

....
function(result)
  {
    alert(result[0]+"\n"+result[0].length);//this will output [object Object] 1
    for (var key in result[0])
    {
      alert(key+':'+result[0][key]); //and this 0:[object Object]
    }
    alert(result[0].title); //here we are getting undefined
  }
....
于 2012-10-26T12:22:27.887 回答