我真的无法弄清楚这里发生了什么。我正在使用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。
有人有任何想法吗?!?!
答案 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_XHR
或AJAX
这样的常量,就像在索引中一样,常量文件或配置。它只是让它更容易使用。请求会在一个请求中将请求从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();
仅仅是个人偏好,但我发现它非常有用 - 而且使用的资源略少。