2016-06-08 120 views
2

我试图从php代码访问输出到jquery ajax。但我不知道为什么它会返回包含结果的整个页面html。任何人都可以告诉我这件事。在Firefox的控制台它显示我的页面html包括PHP结果的响应。但在jQuery代码console.log没有命中。无法从ajax请求中获取来自php返回的响应

这里是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; 
    } 


} 
?> 

请检查代码,并告诉我在哪里,我错了

感谢

+0

请显示更多/你所有的php代码! –

+0

请立即检查@low_rents –

+0

您使用的是什么框架?我不明白你的ajax调用url:'Userpage/get_profile''如何导致'Userpage'类中的get_profile()方法执行。 –

回答

0

使用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()特殊功能。

+0

哇,其工作,请你解释为什么它的工作与退出? –

+0

脚本一直运行,直到你退出它为止http://www.php.net/manual/en/function.exit.php – yosefrow

+0

http://blog.teamtreehouse.com/beginners-guide-to-ajax-development-with -php – Ali

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']); 
    } 
+0

我已经尝试返回但这个东西对我来说不起作用兄弟 –

+0

不,当“回复”一个ajax调用。如果他在这个方法中返回,他需要在这个方法被调用的地方回显(输出)。 –

0

您正在使用CI。从这个Ajax调用:

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

你期望Ajax调用正在以get_profile作出行动中Userpage控制器,这可能会返回:

{ 
    "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,该网址将是这样的:

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调用中将的值指向上面的正确网址。

site_url('Userpage/get_profile') 

我通常在HTML某处打印这个URL,并且AJAX调用期间从JavaScript检索:

通过使用CI的absoulte以上网址可以用SITE_URL()功能的帮助下产生。

+0

Yess我在JSON数据的第1行第141列的JSON数据后得到了错误意外的非空白字符 –

+0

您在echo json_encode()之后放置了“exit”,但您说“它正在返回包含结果的整个页面html”。你可以阅读整个HTML,并猜测它是什么网页? CI通常会向浏览器显示错误。 –

+0

而且,请查看application/logs/*。log文件。如果您的网页遇到错误,则会在那里记录。 –