2016-06-08 122 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文件。如果您的網頁遇到錯誤,則會在那裏記錄。 –