2016-08-18 31 views
0

這是我有史以來的第一個問題。我一直在瀏覽很多其他網站,教程和問題,但無法找到我的問題的答案,最終我決定發佈它,希望找到解決方案,並希望幫助其他面臨同樣問題的人。CodeIgniter - 控制器和視圖之間的JSON傳輸

所以它是這樣的:我目前正試圖在數據庫查詢後使用由我的控制器之一創建的JSON。在我的第一個視圖上使用表單後,我得到了創建我的JSON所需的數據(請參閱後面的內容)。在第一個視圖中提交表單會使控制器加載第二個需要的數據,加載後控制器會發送JSON,這要感謝加載時傳遞的數據。

不幸的是,我似乎無法在我的第二個視圖中獲得JSON。我試着構建一個示例JSON並且它可以工作(這兩個警報都會出現),但只要我嘗試從輸入中獲取它,它就不會。

有沒有人遇到過同樣的問題?有什麼我做錯了嗎?謝謝你的幫助!

我的控制器:(Recherche.php)

class Recherche extends CI_Controller { 
    public function __construct() { 
     parent::__construct(); 
     $this->load->model('Recherche_Model'); 
    } 

    public function rechercheJardins() { 
      $data['liste'] = $this->Recherche_Model->get(); 
      $this->load->view('my_view', $data); 
    } 

    public function sendJson() { 
     $array = $this->input->post('liste'); 
     $liste = $this->jardinToArray($array); 
     echo json_encode($liste); 
    } 
} 

我這裏簡化了rechercheJardins方法,因爲我知道它能夠完成任務並返回正確的數據。 jardinToArray方法簡單地將我的數據轉換爲一個數組(顯然...),並且也可以正常工作。

我的JS腳本:(my_script.js)

jQuery(document).ready(function() { 
    jQuery.ajax({ 
     type: 'post', 
     url: 'http://localhost/garden/Recherche/sendJson', 
     dataType: 'json', 
     success: function (data, statut) { 
      alert('Success'); 
      alert(data); 
     } 
    }); 
}); 

我的第一個觀點:

<div id="recherche-accueil"> 
    <?php 
    $formRecherche = form_open('Recherche/rechercheJardins'); 
    $formRecherche.= form_input('ville', null, 'placeholder="Où souhaitez-vous aller ?"'); 
    $formRecherche.= form_date('arrivee', null, 'placeholder="Date d\'arrivée"'); 
    $formRecherche.= form_date('depart', null, 'placeholder="Date de départ"'); 
    $formRecherche.= form_submit('rechercher', 'Rechercher'); 
    $formRecherche .= form_close(); 
    echo $formRecherche; 
    ?> 
</div> 

我的第二個觀點頭:(由於我只是想現在提醒結果)(my_view.php)

<?php 
defined('BASEPATH') OR exit('No direct script access allowed'); 
?> 
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8"> 
     <title>Project garden</title> 
     <?php 
     echo '<link rel="stylesheet" href="' . base_url('public/css/style.css') . '">'; 
     echo '<script type="text/javascript" src="' . base_url('public/js/jquery-3.1.0.js') . '"></script>'; 
     echo '<script type="text/javascript" src="' . base_url('public/js/my_script.js') . '"></script>' 
     ?> 

    </head> 

編輯: 經過不少試驗後,似乎問題肯定來自「$ array = $ this-> input-> post('liste');」在sendJson方法中行。我試圖用它應該返回的樣本來替換它,看看它是否工作,它是否做到了。 我似乎無法找出原因尚未雖然...

+0

提示:使用console.log()檢查通過ajax請求發送的內容。 (它出現在控制檯瀏覽器中,按f12打開它) –

+0

好吧,它似乎沒有任何東西來自它,因爲甚至連成功條款的第一個警報都不會出現,而它是純文本。 –

+0

console.log輸出的內容是什麼? –

回答

0

提交的表格(第一個視圖)與名​​'liste'沒有外地,所以$this->input->post('liste')(在DC型的public function sendJson())返回null。


更新:

而且你不需要兩種查看文件。 JavaScript和形式可能是在同一個文件:

<?php 
defined('BASEPATH') OR exit('No direct script access allowed'); 
?> 
<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <title>Project garden</title> 
    <?php 
     echo '<link rel="stylesheet" href="' . base_url('public/css/style.css') . '">'; 
     echo '<script type="text/javascript" src="' . base_url('public/js/jquery-3.1.0.js') . '"></script>'; 
     echo '<script type="text/javascript" src="' . base_url('public/js/my_script.js') . '"></script>' 
     ?> 
</head> 

<body> 
<div id="recherche-accueil"> 
    <?php 
    $formRecherche = form_open('Recherche/rechercheJardins'); 
    $formRecherche.= form_input('ville', null, 'placeholder="Où souhaitez-vous aller ?"'); 
    $formRecherche.= form_date('arrivee', null, 'placeholder="Date d\'arrivée"'); 
    $formRecherche.= form_date('depart', null, 'placeholder="Date de départ"'); 
    $formRecherche.= form_submit('rechercher', 'Rechercher'); 
    $formRecherche .= form_close(); 
    echo $formRecherche; 
    ?> 
</div> 
</body> 
</html> 

然後,編輯主js腳本所以它會發送發佈數據(讀這樣的回答:Submitting HTML form using Jquery AJAX)。

另一種選擇:

如果你只是想從控制器到窗體傳遞數據,你並不需要通過Ajax來做到這一點。你可以直接將它傳遞給視圖。

+0

當然,但不是它建立和發送第一頁和第二頁之間的控制器? (rechercheJardin方法) –

+0

在您的ajax中,您不會發布任何值來接收$ this-> input-> post('liste');這個帖子請求首先你應該在你的ajax中添加參數。 –

+0

好吧,但自從我從PHP獲取數據後,我怎麼能把它放入我的ajax?在我加載視圖之前是否需要發佈它?但發送相同的數據兩次...? (對不起,如果我的問題聽起來很愚蠢,我只是不明白其中的邏輯) –

相關問題