Codeignighter - 使用jQuery将表单数据发送到我的控制器

时间:2016-04-08 13:11:09

标签: php jquery ajax codeigniter post

所以我将数据加载到表单中,用户应该能够更改并保存它。数据加载正常,当用户点击保存按钮时,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 !!”

1 个答案:

答案 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]));
    }
}