CodeIgniter -在控制器和视图之间传输JSON
CodeIgniter - JSON transit between Controler and View
这是我在这里的第一个问题。我已经通过了许多其他的网站,教程和问题没有能够找到我的问题的答案,最终我决定发布它,希望找到一个解决方案,并希望帮助其他人面临同样的困难。
所以这里是:我目前试图使用由我的一个控制器在数据库查询后创建的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>
编辑:经过多次试验后,似乎问题肯定来自sendJson方法中的"$array = $this->input->post('list ');"行。我试着用一个它应该返回的样本来替换它,看看它是否有效,它确实有效。
提交的表单(第一个视图)没有名称为'liste'
的字段,因此$this->input->post('liste')
(在控制器的public function sendJson()
中)返回null。
更新:
也不需要两个视图文件。javascript和form可以在同一个文件中:
<?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脚本,这样它就会发送发布的数据(阅读这个答案:使用Jquery AJAX提交HTML表单)。
另一种选择:
如果您只想将数据从控制器传递到表单,则不需要通过ajax来实现。您可以简单地将它直接传递给视图。
- 如何使用WebRTC在两个浏览器之间传输文件
- 在两个组件之间传输状态
- 是否可以在由春季网络流驱动的html页面之间传输数据
- 通过 HTTP 在两个节点.js服务器之间传输文件
- 如何在两个Liferay输入编辑器之间传输html
- 数组值在 2 个函数之间传输
- javascript如何使用在网站之间传输信息
- 使用 WebRTC 在浏览器之间传输 JSON
- 使用服务在 Angular 中不同应用程序的控制器之间传输数据
- 在网站上的页面之间传输数据
- PhoneGap(网络移动应用程序)-在页面之间传输数据
- PubSub模式用于在两个解耦的javascript模块之间传输数据
- 如何使用端口在main.js和面板之间传输消息'的内容脚本
- 在Java后端和javascript前端之间传输数据
- 在不同域的用户脚本之间传输数据
- 如何在网站之间传输javascript数据
- 在cgi和Javascript/Jquery之间传输数据
- 如何在HTML页面之间传输值
- 如何使用jQuery将文本附加到列表之间传输的项目
- Gmail api &Admin SDK用于在同一组织的gmail帐户之间传输电子邮件