我的JQuery,Ajax和PHP代码有问题。
我有一个页面包含用户的所有帖子。
然后在这个页面中,我想使用Ajax加载该帖子的最新评论。
但它没有显示任何内容。
这是我调用JQuery函数的PHP代码:
<? foreach($post_query as $post_row){ ?>
<li class="post_list">
<?php echo $post_row['text'];?>
<br/>
Latest Comment:
<br/>
<script type="text/javascript">
var post_id = $('#post_id_<?php echo $post_row['id'];?>').val();
document.write(post_id);//just to check that post_id value is not undefined
$(function(){
$.getJSON("<?php echo base_url();?>postC/latest_comment", {post_id: post_id},
function(res){
$("#result").prepend(res.text);
});
});
</script>
<? } ?>
这是我处理请求的PHP代码点火器控制器:
class postC extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->model('models_facade');
$this->load->Database();
$this->load->helper('url');
$this->load->helper('form');
$this->load->library('tank_auth');
$this->load->library('user_session_lib');
error_reporting(E_ALL ^ (E_NOTICE | E_WARNING));
}
function latest_comment(){
$post_id = $this->checkValues($_GET['post_id']);
$latestcomment = $this->models_facade->getLatestCommentForPost($post_id);
return json_encode($latestcomment);
}
}
我已经测试过手动调用该函数并显示最新的注释而不使用ajax,并且它有效。所以这意味着模型中的后端函数没有任何问题,从mysql中检索结果 我也尝试过:
echo json_encode($latestcomment);
尝试手动调用该函数时,我可以看到数据是JSON格式的 所以这意味着,ajax调用有问题,它没有从控制器获取数据。我使用GET表示.getJSON,POST表示.post()和.ajax()。
我已经尝试了所有版本的jQuery Ajax调用:.getJSON(),. post()和.ajax(),但都没有。 我确信相应的Jquery库已正确加载,因为我所有其他的ajax函数都可以正常工作。
有没有人知道错误的位置?我已经调试了一整天,没有结果 感谢
答案 0 :(得分:1)
这就是我处理jQuery Codeigniter调用的方式,它对我有用。
尝试使用jQuery:
$(function(){
$.post("<?php echo base_url();?>postC/latest_comment", {post_id: post_id},
function(data){
$("#result").prepend(data.html);
},'json');
});
PHP:
function latest_comment(){
$post_id = $this->checkValues($_GET['post_id']);
$jsonData['html'] = $this->models_facade->getLatestCommentForPost($post_id);
echo json_encode($jsonData);
}
这将允许您将更多内容放入返回的JSON对象中。我喜欢使用的一个技巧是向数组添加“失败”和“msg”值。因此,如果需要通知用户,那么我可以告诉用户它失败了,也许是为什么。
希望有所帮助
// lance
答案 1 :(得分:0)
我的猜测是你没有在你的配置文件中启用查询字符串,这可能会对你有用,
的javascript:
$(function(){
$.getJSON("<?php echo base_url();?>postC/latest_comment/" + post_id, function(res){
$("#result").prepend(res.text);
});
});
并在php控制器中:
function latest_comment($post_id)
{
$post_id = $this->checkValues($post_id);
$latestcomment = $this->models_facade->getLatestCommentForPost($post_id);
// Better practise to put json header
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');
return json_encode($latestcomment);
}
答案 2 :(得分:0)
这就是我处理jQuery Codeigniter调用的方式,它对我有用。
$(function(){
$.post("<?php echo base_url();?>postC/latest_comment", {post_id: post_id},
function(data){
$("#result").prepend(data.html);
},'json');
});
PHP:
function latest_comment(){
$post_id = $this->checkValues(**$_GET['post_id']**);
$jsonData['html'] = $this->models_facade->getLatestCommentForPost($post_id);
echo json_encode($jsonData);
}
这将允许您将更多内容放入返回的JSON对象中。我喜欢使用的一个技巧是向数组添加“失败”和“msg”值。因此,如果需要通知用户,那么我可以告诉用户它失败了,也许是为什么。
希望有所帮助
在这个答案中
$_POST['post_id']
对我的案例工作正常,而不是$_GET['post_id']
答案 3 :(得分:0)
我的朋友,我有一个类似的情况。而不是使用返回编码json尝试回显结果。您基本上需要的是一个现成的json数据文件和解析它的脚本。在您的情况下,结果只是浮动并等待在视图中回显。希望它有所帮助。