gpt4 book ai didi

php - 非常奇怪的行为 jQuery load() 与 CodeIgniter

转载 作者:行者123 更新时间:2023-11-28 21:21:34 24 4
gpt4 key购买 nike

我实在搞不懂这是怎么回事。我正在使用 jQuery load() 方法来替换页面中的一些 HTML。在这种情况下,它将用用户从列表中选择的消息替换当前消息。除了一件重要的事情之外,一切都按预期进行。当 HTML 返回时,它会在其他内容之前添加单词“ARRAY”。没有其他信息(就像您从 var_dump() 获得的信息一样),也没有标签。从字面上看,只是大写字母的单词!如果我在不使用 AJAX 的情况下加载 View ,那么它会按预期呈现。唯一的区别是请求是通过 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 Controller :

 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);
}
}

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

有人有什么想法吗?!?!

最佳答案

我将尝试帮助您在答案中进行调试,而不是埋藏在评论中。

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

我的第一个建议:返回到同一 Controller 中的 __construct() 并执行相同的操作。如果仍然得到相同的结果,请进一步返回,也许返回到正在使用的库。如果您不再看到Array,请开始使用退出代码,直到您找到它似乎触发的点。仅供引用,因为您说您对调试代码的概念不熟悉,所以这不是调试方式,它只是一种方式。

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

旁白:一点方便的提示(我做的):将 $this->input->is_ajax_request() 设置为常量,如 IS_XHR code> 或 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();

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

关于php - 非常奇怪的行为 jQuery load() 与 CodeIgniter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6218067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com