使用CodeIgniter的jQuery load()非常奇怪

时间:2011-06-02 17:35:38

标签: php javascript jquery codeigniter

我真的无法弄清楚这里发生了什么。我正在使用jQuery load()方法替换页面中的一些HTML。在这种情况下,它是用当前消息替换用户从列表中选择的消息。 除了一件至关重要的事情之外,它都按预期工作。返回HTML时,它在其他任何内容之前添加了单词“ARRAY”。没有其他信息(就像你从var_dump()得到的那样)并没有标签。从字面上看,只是大写字母的单词!如果我在不使用AJAX的情况下加载视图,那么它会按预期呈现。唯一的区别是请求是用AJAX完成的。这是相关的代码:

js :(全部包含在ready()中)

$('.message_summary').click(function() {
        // get message id
        id = $(this).attr('id');

        // load the new message first so that user can get on with reading it
        $('#message_window').load($.baseurl+'messages/get_message/'+id);

        // mark as read
        $.get($.baseurl+'messages/ajax/mark_as_read/'+id);

        // get current tag id
        $.get($.baseurl+'messages/get_current_tag', 
            function(data){
                            // get the message count
                            $.get($.baseurl+'messages/ajax/set_new_message_count/'+data,
                                    function(msg_count)
                                    { 
                                        $('.new_message_count_'+data).html(msg_count);
                                    }
                                );
            });           
});

CI控制器:

 public function get_message($message_id=false)
    {
        if($message_id)
        {               
            // get an individual message and prepare for display
            $message = $this->messages_m->get_single_message($message_id);

            foreach($this->tags['id'] as $index => $tag)
            { 
                $tag_options[$tag] = $this->tags['tag_name'][$index];
            }


            $main_message = array(
                                    'message_id'    => $message_id,
                                    'tag_name'      => $message->tag_name,
                                    'tag_options'   => $tag_options,
                                    'sender' => $message->first_name.' '.$message->last_name,
                                    'date_received' => date($this->config->item('date_time_format'), $message->created_at),
                                    'subject' => $message->subject,
                                    'content' => $message->message
                                );                                    
            if($this->input->is_ajax_request())
            {
                return $this->load->view('partials/message_view', $main_message);
            }
            else
            {
                return $this->load->view('partials/message_view', $main_message, true);
            }
        }

视图文件只是带有一些php变量的HTML。

有人有任何想法吗?!?!

1 个答案:

答案 0 :(得分:3)

我将尝试帮助您调试答案而不是隐藏在评论中。

我们已尝试if($this->input->is_ajax_request()) exit('Hello');作为get_message()的第一行,输出为Arrayhello。这让我相信在某个地方,你正在检查一个AJAX请求和echo某个数组,因为如果你试图这样做会发生这种情况。

我的第一个建议:回到同一个控制器中的__construct()并做同样的事情。如果仍然得到相同的结果,请回到更远的位置,也许再回到正在使用的库中。如果您再看到Array,请继续使用退出代码,直到找到它似乎触发的点。仅供参考,因为您说您对调试代码的概念不熟悉,这不是 调试的方式,它只是一种方式。

此外,从您的评论中看来,您现在获得Array而不是大写版本?这很奇怪,听起来不对。确保您正在阅读Firebug中的实际响应,而不是页面中屏幕上显示的内容。

除了:一点点便利提示(我做的事情):将$this->input->is_ajax_request()设置为像IS_XHRAJAX这样的常量,就像在索引中一样,常量文件或配置。它只是让它更容易使用。请求会在一个请求中将请求从ajax更改为非ajax吗?不。只需在system/core/Input.php中查看它的源代码,这非常简单。例如:

define('AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest');

这实际上是Input类的功能,尽管它有点混淆。现在你可以使用:

 if (AJAX) do_ajax_stuff();

仅仅是个人偏好,但我发现它非常有用 - 而且使用的资源略少。