2016-08-18 50 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?在我加载视图之前是否需要发布它?但发送相同的数据两次...? (对不起,如果我的问题听起来很愚蠢,我只是不明白其中的逻辑) –

相关问题