2011-11-04 121 views
0

我想通過用戶輸入表單jQuery/ajax但我無法從服務器獲取任何數據,而使用json_encode()方法PHP方。沒有使用Json之前,一切正常。我有點困惑如何獲取和顯示數據結果。我必須解碼嗎?如何在編碼Json之後獲取並顯示數據?

jQuery代碼:

$(document).ready(function() { 

    $('#keyword').keyup(function(event) { 
     event.preventDefault(); 

     // Get input form 
     var keyword = $('#keyword').val(); 
     var path = "<?php echo site_url('controller/suggestion'); ?>"; 

      $.ajax({ 
       url: path, 
       type: "POST", 
       data: { search: keyword }, 
       success: function(data) { 
        console.log('>> Data: ', data); 
       } 
      }); 
     } 
    }); 

PHP控制器:

public function suggestion() { 
    // Get the keyword from Ajax request 
    $keyword = strip_tags($this->input->post('search')); 

    if (isset($keyword) && !empty($keyword)) { 
     echo '>> Search Keyword: '. $keyword; 
     $this->tabResults = json_encode($this->model->findKeyword($keyword, 5)); 

     //print_r($this->tabResults); 
     $data['searchResults'] = $this->tabResults; 
     $this->load->view('results', $data); 
    } 
} 

HTML:

<div id="container"> 
    <div id="header"> 

     <div class="search"> 
      <form id="myform" method="post" action="film_controller/test"> 
       <input type="text" name="keywordsearch" id="keyword"> 
       <input type="submit" name="search" value="Search"> 
      </form> 
      <div id="suggestionResult"></div> 
     </div> 

    </div> 
</div> 

我想補充數據類型: 「JSON」,並設置數據。搜索結果;

我在Firebug的控制檯錯誤: 「更新語法錯誤:200 「JSON.parse:意外的字符數據......」

$.ajax({ 
       url: path, 
       type: "POST", 
       data: { search: keyword }, 
       dataType: "json", 
       success: function(data) { 
        console.log('>> Data: ', data.searchResults); 
       }, 
       error:function (xhr, textStatus, thrownError){ 
        console.log(">> Update Error Status: ", xhr.status, "Error Thrown: ", thrownError); 
       }  
      }); 

在我的控制器:

public static $tabResults = array(); 

public function __construct() { 
    parent::__construct(); 

    $this->tabResults = self::$tabResults; 
} 
public function suggestion() { 
    // Get the keyword from Ajax request 
    $keyword = strip_tags($this->input->post('search')); 

    if (isset($keyword) && !empty($keyword)) { 
     echo '>> Search Keyword: '. $keyword; 
     $this->tabResults = json_encode($this->film_model->findKeyword($keyword, 5)); 

     print_r($this->tabResults); 
     $data['searchResults'] = $this->tabResults; 
     $this->load->view('results', $data); 
    } 
} 
+0

JSON的只是封裝本地數據結構到一個普通字符串的方法,使用(J)ava(S)cript(O)對象(N)選擇。你的PHP數據結構被轉換成一個JSON字符串,這個jQuery會轉換成一個本地的JavaScript等價結構。 –

+0

如何在HTML文件中將其轉換爲Json字符串後調用我的PHP數據結構($ this-> tabResults)? – qpixo

回答

0

如果你想返回json數據,你不需要加載視圖,只需返回json編碼的數據。

if (isset($keyword) && ! empty($keyword)) 
{ 
    $this->tabResults = json_encode($this->model->findKeyword($keyword, 5)); 

    if ($this->input->is_ajax_request()) 
    { 
     return print $this->tabResults; 
    } 

    $data['searchResults'] = $this->tabResults; 
    $this->load->view('results', $data); 
} 
+0

那麼我怎樣才能在JQuery中調用$ this-> tabResults?成功:函數(數據){console.log('>> Data',data.tabResults); }不起作用Firebug show數據:undefined – qpixo

+0

你的AJAX調用看起來不錯。但是你正在返回一個字符串,而不是一個對象。所以只需檢查console.log('>> Data',data); –

+0

其實我正在返回一個數組($ this-> tabResults)。調用console.log(「Data:」,data)時,我什麼也收不回來。有點奇怪!我做錯了什麼? – qpixo

1

jquery $_ajax()函數中有dataType屬性。你必須將其設置爲json。

如果設置爲這樣,結果將以對象的形式顯示。因此,您必須訪問類似對象(即,數據。[您從服務器端發送的文本])。

以下網址可以幫助U.

http://api.jquery.com/jQuery.ajax/ 

,如果你有這仍然問題,PLZ讓我知道..

+0

同意,好點。此外,服務器響應應該是類似'return print(json_encode((object)array('tabResults'=> $ this-> model-> findKeyword($ keyword,5))));'在這種情況下,qpixo可以獲得' data.tabResults'。 –

+0

嘿,我發現一種方法來顯示使用$ this-> output-> set_output(json_encode(...));但是當沒有數據時,我想添加一條自定義錯誤消息。在jquery中我應該添加它?我很難弄清楚這一點。 – qpixo

+0

他們是這樣的,你可以像這樣設置json_encode(array('status'=> 0))爲一個狀態和另一個json_encode(array('status'=> 1)),你可以在js中檢查它並添加你的自定義消息在JS ..! – Sakthi

相關問題