jquery post返回整个html页面代码

时间:2013-04-12 13:37:19

标签: jquery codeigniter jquery-post

脚本:

$.post("<?php echo base_url(); ?>home/comment?"+$("#MYFORM").serialize(), {

                    }, function(response){

                    if(response.msg == '1')
                    {
                        .....
                    }
                    else
                    {
                                            ....
                    }
            }, "json"
            );

动作:

function comment()
{   
    echo json_encode("msg=".$this->homemodel->comments());          
}

问题: homemodel-&gt;注释返回1或0问题是在firebug的响应面板中它显示了动作的回显值加上整个html页面。因此我无法将response.msg的值视为1或0.此代码有什么问题。我必须改变什么才能将评论操作中的值echo仅返回到post jquery?

1 个答案:

答案 0 :(得分:0)

我不确定你的工作方式是什么,甚至不应该做什么,但是当我使用$ .post(或ajax)时,我通常会做的是在post数据中添加一个额外的参数(ajax = 1)所以我可以知道并只做一个ajax调用时我想要的回音。所以基本上,在服务器端,它看起来像这样:

if (isset($_POST['ajax']) && $_POST['ajax']) {
   echo json_encode($anArray);
   die()
}

die()函数可以防止页面的其余部分被回显。这非常有用,因为你可以创建一个文件(我们称之为inc.ajax.php),它包含在任何代码被删除之前(让我们说在index.php的标题或第一行,无论如何)你可以使用它作为控制者。所以你可以添加一个运算符,inc.ajax.php将成为你的ajax控制器。收回前面的例子:

if (isset($_POST['ajax']) && $_POST['ajax']) {
   $operator = $_POST['operator'];
   switch ($operator) {
     case 'upload':
        $obj->upload();
        echo json_encode($obj,true);
     break;
     default:
        echo json_encode($anArray);
     break;
   }
   die()
}

如果inc.ajax包含在每个页面中(也许在index.php上),那么当前网址上的$ .post()很容易被ajax = 1&amp; operator = [你的运算符]并且你将永远得到你需要的json(或者响应可能仍然是html。在一个操作符中,你可以回显整个模板然后“die()”,这样你就可以得到你想要的网站的一部分。)希望这个帮助,希望我没有错过这一点,当然希望我没有把你与所有这些东西混淆!