所以我将数据加载到表单中,用户应该能够更改并保存它。数据加载正常,当用户点击保存按钮时,jQuery会抓取该数据,并将其发送到我的codeignighter控制器,但事实并非如此。奇怪的是,codeignighter说电话是成功的。
这是我的jQuery(它是一个单独的.js文件):
TextBox
我的观点:
$(document).ready(function(){
$("#checkin").submit(function(e){
e.preventDefault();
var ConditionID = [];
$('input[name^="ConditionID"]').each(function() {
ConditionID.push($(this).val());
});
var Field = [];
$('div[name^="Field"]').each(function() {
Field.push($(this).val());
});
var Status = [];
$('select[name^="Status"]').each(function() {
Status.push($(this).val());
});
var Description = [];
$('textarea[name^="Description"]').each(function() {
Description.push($(this).val());
});
$.ajax({
url: "/index.php/ConditionReports/saveCheckin",
type: "POST",
data: {'ConditionID':ConditionID,'Field':Field,'Status':Status,'Description':Description},
success:function(data)
{
alert('SUCCESS!!');
},
error:function(jqXHR, textStatus) {
alert( "Request failed: " + textStatus );
}
});
});
});
我的控制器:
<form action='' method='post' id='checkin' accept-charset='ytf-8'>
<?php
$i=0;
foreach($Conditions as $c) {
echo("
<input type='hidden' id='ConditionID' name='ConditionID[]' value='$c->ConditionID' />
<div id='Field' name='Field[]' value='$c->Field'>$c->Field</div>
<select id='Status' name='Status[]'>");
$e=($c->Status=="E"?"selected":"");
$g=($c->Status=="G"?"selected":"");
$s=($c->Status=="S"?"selected":"");
$b=($c->Status=="B"?"selected":"");
$m=($c->Status=="M"?"selected":"");
echo("
<option $e value='E'>Excellent/New</option>
<option $g value='G'>Good</option>
<option $s value='S'>Satisfactory</option>
<option $b value='B'>Poor/Needs Repair</option>
<option $m value='M'>Missing</option>
</select>
<textarea class='form-control' name='Description[]' id='Description'>$c->Description</textarea>
");
$i++;
}
?>
<button type="button" class="btn btn-info">Print</button>
<input type="submit" id="saveCheckin" value='Save' class="btn btn-success save">
<button type="button" class="btn btn-success">Check-In</button>
</form>
最后我的模特:
class ConditionReports extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
$this->load->model('ConditionReportsVM');
$header_data['js'] = array('jquery-2.2.1.min','checkin');
$this->load->view('header', $header_data);
}
public function saveCheckin()
{
$data = array(
'ConditionID' => $this->input->post('ConditionID'),
'Field' => $this->input->post('Field'),
'Status' => $this->input->post('Status'),
'Description' => $this->input->post('Description'),
);
$this->ConditionReportsVM->UpdateReport($data);
}
}
我现在已经坚持了很长一段时间,我能得到的任何帮助都非常感激。我调试了jQuery并发现正在调用适当的数据。没有控制台错误。我试图从控制器回应一些东西,我也尝试从控制器重定向页面,但控制器似乎没有被击中。
提前谢谢。
注意:目前我单击“保存”后得到的响应是一个警告:“SUCCESS !!”
答案 0 :(得分:1)
感谢Goose(在评论中)我能够找到我的问题。我不知道这一点,但如果您转到开发人员工具,可以看到服务器的响应,然后转到“网络”选项卡。我一去那里就注意到codeigniter在我的模型中抛出一个数组到字符串转换错误。
以下是我的模型现在的样子(数据正在保存,所有内容):
public function UpdateReport($data)
{
for($i=0;$i<count($data['ConditionID']);$i++) {
$this->db->where('ConditionID',$data['ConditionID'][$i]);
$this->db->update('Conditions', array('Status' => $data['Status'][$i], 'Description' => $data['Description'][$i]));
}
}