【问题标题】:Passing a value from Controller to jQuery CodeIgniter将值从 Controller 传递给 jQuery CodeIgniter
【发布时间】:2016-05-27 09:42:13
【问题描述】:

直奔主题。

这是我的模型(学生模型)的一些功能:

public function get_exam_data($exam_id){
    $this->db->select('exam_id, exam_name, duration');
    $this->db->from('exams');
    $this->db->where('exam_id', $exam_id);
    $result = $this->db->get();

    $exam = array();
    $examrow = $result->row();
    $exam['id'] = $examrow->exam_id;
    $exam['name'] = $examrow->exam_name;
    $exam['duration'] = $examrow->duration;
    return $result;
}

public function start_exam($exam_id, $student_id)
{
    $this->db->select('*');
    $this->db->from('exam_record');
    $exam_newstatus = array(
        'student_id' => $student_id,
        'exam_id' => $exam_id);
    $this->db->set('start_time', 'NOW()', FALSE);
    $this->db->insert('exam_record', $exam_newstatus);

    //$examrecord_id is autoincrement in mysql exam_record table
    $examrecord_id = $this->db->insert_id();
    return $examrecord_id;
}

这是来自学生控制器的函数:

public function get_student_exam_data()
{
    $exam_id  = $this->input->post('examId');
    $examdata = $this->student_model->get_exam_data($exam_id);
    $session = get_session_details();

    if (isset($session->studentdetails) && !empty($session->studentdetails))
    {
        $loggeduser = (object)$session->studentdetails;
        $examrecord_id = $this->student_model->start_exam($exam_id, $loggeduser->student_id);
    }
    echo json_encode($examdata);
}

这就是我通过 Ajax 访问 $examdata 值的方式:

jQuery(function()
{
    $.ajax({
        type   : "POST",
        url    : "../get_exam_data/",
        async  : false,
        data   : {"examId": EXAM_ID },
        success: function(response)
        {
            var data = $.parseJSON(response);
            examId = data.id;
            examName = data.name;
            examDuration = data.duration;
        }
    });
}

我希望能够从学生控制器传递 $examrecord_id 以在我的 jQuery 文件上使用它,就像 $examdata. 我尝试在控制器上使用 json_encode() 两次。没用。

如何将 $examrecord_idController 传递到 jQuery 文件? 有人可以启发我吗?谢谢。

【问题讨论】:

  • 您听说过隐藏输入或一般输入吗?
  • 如果你在你的javascript中设置dataType: 'json',,jquery会自动反序列化你的响应。 (见这里:stackoverflow.com/questions/8517071/…
  • @FlorianMoser 这是一个很好的提示。为了访问数据,我必须先指定数据类型,这样 Ajax 才能翻译该数据结构。 (CMIIW)
  • @madalinivascu 是视图中常用的那些吗?我在输入数据表单中使用了几个隐藏索引?

标签: php jquery mysql ajax codeigniter


【解决方案1】:

为您的 $examrecord_id 添加另一个索引

if (isset($session->studentdetails) && !empty($session->studentdetails))
{
    $loggeduser = (object)$session->studentdetails;
    $examrecord_id = $this->student_model->start_exam($exam_id, $loggeduser->student_id);
}
echo json_encode(array(
    'examdata' => $examdata,
    'examrecord_id' => (!empty($examrecord_id)?$examrecord_id:0)
));

注意简写if 条件以检查$examrecord_id 是否为empty

添加一个dataType 选项和'json' 作为它的值。然后就可以访问数据了

dataType : 'json',
success: function(response)
{
    var data = response.examdata;
    alert(response.examrecord_id); // your examrecord_id
    examId = data.id;
    examName = data.name;
    examDuration = data.duration;
}

【讨论】:

  • 我刚试过这个,它奏效了。我很欣赏这个。非常感谢!这实际上是我为了学习编程的第一个项目。我还有很多东西要学。你用警报显示它的方式让我可以立即注意到它真是太棒了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
相关资源
最近更新 更多