【发布时间】:2011-06-02 17:35:38
【问题描述】:
我真的不知道这里发生了什么。我正在使用 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。
有人有什么想法吗?!?!
【问题讨论】:
-
我之前没用过CI,但是我用过其他PHP MVC框架。是否存在用于 ajax 视图渲染的主模板,其中包含单词
ARRAY。或者,您可以搜索您的项目(大多数编辑器/IDE 具有此功能)并搜索大写单词ARRAY -
你在调试方面有什么尝试?例如,当您
exit('Something')作为第一行时会发生什么?仅根据您发布的内容,我看不到对此的任何解释,如果其他人可以,我会感到惊喜。 -
感谢@devmatt 的建议,但我认为这不是问题所在。首先,我对整个项目进行了搜索,但一无所获。其次,当视图从 AJAX 加载时,它不会经过任何类型的模板。当页面第一次加载时,加载相同的视图没有问题,只有在通过 AJAX 加载时才会出错。
-
@Wesley Murch,我对如何调试有点不知所措!我使用 Firebug 来检查 AJAX 调用的确切响应。除了在响应中包含“ARRAY”之外,我看不出任何奇怪的地方。我试过使用 var_dump ,但没有产生任何结果。我不确定你的 exit('Something') 建议是什么意思 - 你能详细说明一下吗?
-
好的,把它作为
get_message()的第一行:if($this->input->is_ajax_request()) exit('Hello');,告诉我们你得到了什么。
标签: php javascript jquery codeigniter