无法从ajax请求中的php返回获得响应

时间:2016-06-08 07:01:11

标签: javascript php jquery ajax codeigniter

我正在尝试从php代码访问jquery ajax的输出。但我不知道为什么它会返回整页html包括结果。任何人都可以告诉我这件事。在firefox控制台它显示我的页面HTML的响应,包括PHP结果。但是在jquery代码中,console.log没有命中。

这是jquery代码

function getprofile()
{
     $.ajax({
            url: 'Userpage/get_profile',
            //data: {'title': title},  change this to send js object
            type: "post",
            dataType: 'json',
            data: {'userid': 1}, 
            success: function(data) { 

            console.log(data);
          }
        });
}

我的PHP代码

   <?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');
class Userpage extends CI_Controller
{


    function __construct()
    {

        parent::__construct();

        $this->load->helper('url');
        $this->load->helper('form');
        $this->load->library("session");
        $this->load->model("Userpage_model");
        $this->load->view('Userpage_view');
    }

    public function index()
    {

    }


    public function get_profile()
    {
        $data = array();
        $post_id = $this->input->post('userid');
        $data['comments'] = $this->Userpage_model->get_profile($post_id); 
        echo json_encode($data['comments']);
        exit;
    }


}
?>

请查看代码并告诉我出错的地方

由于

3 个答案:

答案 0 :(得分:1)

使用exit

public function get_profile()
    {
        $data = array();
        $post_id = $this->input->post('userid');
        $data['comments'] = $this->Userpage_model->get_profile($post_id); 
        echo json_encode($data['comments']);
        exit; // use exit here
    }

修改

PHP使用一个名为header()的特殊函数在渲染过程中设置页面的属性。

答案 1 :(得分:1)

你需要从你的功能返回,使用退出很好,但这不是一个好习惯

public function get_profile()
    {
        $data = array();
        $post_id = $this->input->post('userid');
        $data['comments'] = $this->Userpage_model->get_profile($post_id); 
        return json_encode($data['comments']);
    }

答案 2 :(得分:0)

您正在使用CI。从这个ajax电话:

$.ajax({
    url: 'Userpage/get_profile',
    success: function(data) {
        console.log(data);
    }
});

您希望在用户页面控制器内对 get_profile 操作进行ajax调用,这可能会返回:

{
    "comments": [
        { ... },
        { ... },
        { ... },
        ...
    ]
}

将在浏览器控制台中记录。

但是你得到了意想不到的结果,对吧?

我认为,你的ajax调用会导致错误。要证明这一点,请修改您的ajax调用:

$.ajax({
    url: 'Userpage/get_profile',
    success: function(data) {
        console.log(data);
    },
    error: function(jqXHR, textStatus, errorThrown) {
        // add this function to logs error
        console.log(textStatus + ': ' + errorThrown);
    }
});

现在,如果ajax调用导致错误,您可以在浏览器控制台中看到错误。我很确定你会在浏览器控制台中收到错误:找不到

您正在使用CI,URL类似于:

http://<something>/index.php/site/index

在这个页面中,如果你使用url Userpage / get_profile进行ajax调用,浏览器真正做的是调用ajax:

http://<something>/index.php/site/index/Userpage/get_profile

而不是您的期望:

http://<something>/index.php/Userpage/get_profile

要解决此问题,您必须在ajax调用中更改 url 的值,以指向上面的正确网址。

通过使用CI,可以在 site_url()功能的帮助下生成上面的absoulte URL:

site_url('Userpage/get_profile')

我通常在HTML中的某处打印此URL,并在ajax调用期间从javascript中检索它。