使用codeigniter在ajax中获取响应数据

时间:2014-10-12 14:58:49

标签: ajax codeigniter

嗨我有这个数据,我希望只有某个div将使用ajax刷新。我如何能够将json_encode传递给ajax,它将使用codeigniter加载某个div上的数据。 下面是我的控制器

$this->data['getNumberOfMessages'] = $this->mm->getNumberOfMessages($this->data['id']);
$this->data['countNumber'] = $this->data['getNumberOfMessages'];

$responseOnject = new stdClass();
$responseOnject->status = 'ok';
$responseOnject->StatusMessages=$this->data['countNumber'];

$this->output->set_output(json_encode($responseOnject));

这行代码

$this->output->set_output(json_encode($response));

输出这个

{"status":"ok","StatusMessages":20}

我希望在我的代码中传递我的ajax

$(document).ready(function(){
     var id =$(this).data("messageid");
     $.ajax({
        type: "get",
        url: $(this).data("href"),

        success: function(data){
            alert(data.StatusMessages);
            console.log(data.StatusMessages);

            $("#" + id + ' span.badge').html(data.StatusMessages);
        }
    });
});

并定位在我的某个div上,以便它会自动刷新  下面是我的代码

<tr>
    <th>
        <a href="#" id="<?php echo $id; ?>" data-messageid="<?php echo $id; ?>" data-href="<?php echo base_url().'profile'?>" title="messages">
        <span class="badge"><?php echo $countNumber; ?></span>
                    message(s)</a>
    </th>
</tr>

当我尝试alert(data.StatusMessages);时,它返回undefined。 有人可以帮我解决这个问题吗?香港专业教育学院一直困在这..我的代码真的有效,但我想成为ajax,只有某些div刷新而没有引用我的整个页面。 非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

您需要首先解码响应JSON,以便能够将其作为JS对象进行访问。这是它在JS中的表现:

JSON.parse(JSONStringHere);

所以,你的成功回调应该是:

success: function(data){
      data = JSON.parse(data); // this is what decodes JSON
      alert(data.StatusMessages);
      console.log(data.StatusMessages);

      $("#" + id + ' span.badge').html(data.StatusMessages);
    }

正如我在评论中所说,您没有使用AJAX调用正确的URL (虽然您说过并且它返回了JSON字符串;如果是,则上面的代码<强>会工作)。这看起来不会给你一个网址:

$(document).ready(function(){
  var id =$(this).data("messageid");
  $.ajax({
    type: "get",
    url: $(this).data("href"), // <---- what is the value of this?

修复后,您的代码就可以使用。

答案 1 :(得分:0)

对于JSON数据,您的控制器应具有以下输出行

<强>更新

刚刚注意到你的问题是codeigniter正在你的ajax响应旁边输出html。

要使其消失,控制器中的代码应如下所示:

$this->output
     ->set_content_type('application/json', 'utf-8')
     ->set_output(json_encode($responseOnject))
     ->_display();
exit;

这会强制输出库显示&amp;退出停止显示任何其他内容。

如果你没有设置应用程序/ json内容类型,你的响应将不会被视为JSON你必须在你的javascript代码中使用JSON.parse将它转换为json,这是一种不好的做法。 / p>