首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过ajax将隐藏字段值传递给codeigniter控制器

如何通过ajax将隐藏字段值传递给codeigniter控制器
EN

Stack Overflow用户
提问于 2016-09-05 19:12:29
回答 2查看 3.2K关注 0票数 4

我有一个包含按钮(链接)的视图文件:

代码语言:javascript
复制
<a href id="savebutton" class="btn btn-warning">Save</a>

在这个视图的其他地方,我还在一个表单中声明了一些隐藏字段,其中包含我的userid和vacancyid。

代码语言:javascript
复制
echo form_input(dataHiddenArray('userid', $this->auth_user_id));
echo form_input(dataHiddenArray('vacancyid', $vacancydetails[0]->vacancy_id));

这些隐藏字段转换为:

代码语言:javascript
复制
<input type="hidden" value="2" class="userid">
<input type="hidden" value="1" class="vacancyid">

现在,我希望能够将这些值发送到我的控制器(通过AJAX),这样我就可以将它们插入到数据库中。

我的JS文件如下所示:

代码语言:javascript
复制
$(function() {
    var postData = {
        "userid" : $("input.userid").val(),
        "vacancyid" : $("input.vacancyid").val()
    };                                        
        btnSave = $('#savebutton'),
        ajaxOptions = {
            cache: false,
            type: 'POST',
            url: "<?php echo base_url();?>dashboard/vacancy/saveVacancy",
            contentType: 'application/json',
            dataType: 'text'
        };

    btnSave.click(function (ev) {
        var options = $.extend({}, ajaxOptions, {
            //data : $(this).closest('form').serialize()
            data: postData
        });
        ev.preventDefault();

        // ajax done & fail
        $.ajax(options).done(function(data) {
            alert(data);        // plausible [Object object]
            //alert(data[0]);     // plausible data
            console.log(data);  // debug as an object
        }).fail(function (xhr, status, error) {
            console.warn(xhr);
            console.warn(status);
            console.warn(error);
        });
    });

我的控制器看起来像这样(它没有做很多事情,因为它没有返回任何东西):

代码语言:javascript
复制
public function saveVacancy() {
        //$this->load->model('user/usersavedvacancies_model');
        /*$data = array(
            'userid' => $this->input->post('userid'),
            'vacancyid'=>$this->input->post('vacancyid')
        );*/
        echo $this->input->post('userid');
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-05 20:26:54

对javascript的细微更改

代码语言:javascript
复制
$(function () {
    var postData = {
        "userid": $("input.userid").val(),
        "vacancyid": $("input.vacancyid").val()
    };
    btnSave = $('#savebutton'),
      ajaxOptions = {
          type: 'POST',
          url: "<?php echo base_url('dashboard/vacancy/saveVacancy);?>",
          dataType: 'json'
      };

    btnSave.click(function (ev) {
        var options = $.extend({}, ajaxOptions, {
            //data : $(this).closest('form').serialize()
            data: postData
        });
        ev.preventDefault();

        // ajax done & fail
        $.ajax(options).done(function (data) {
            console.log(data);  // debug as an object
            if (data.result === 'success') {
                alert("Yeah, it saved userid " + data.userid + " to vacancy id " + data.vacancyid);
            }
        }).fail(function (xhr, status, error) {
            console.warn(xhr);
            console.warn(status);
            console.warn(error);
        });
    });
});

在控制器中

代码语言:javascript
复制
public function saveVacancy()
{
    //assigning a more useable object name to the model during load
    $this->load->model('user/usersavedvacancies_model', 'save_vacancy'); 

    $data = array(
        'userid' => $this->input->post('userid'),
        'vacancyid' => $this->input->post('vacancyid')
    );
    //send data to model and model returns true or false for success or failure
    $saved = $this->save_vacancy->doSaveId($data); //yes, I made up the method, change it
    $result = $saved ? "success" : "failed";
    echo json_encode(array('result' => $result, 'userid' => $data['userid'], 'vacancyid' => $data['vacancyid']));
}
票数 2
EN

Stack Overflow用户

发布于 2016-09-05 19:52:45

你需要理解$.ajax有两个方法,即GET和POST,从文档中你可以看到默认的方法是GET,因为你没有定义GET/POST方法,所以这个方法可能是GET,所以第一个改变是定义要POST的ajax方法,你也需要清楚ajax的dataType,它可能是JSON/html之一,默认是json。

代码语言:javascript
复制
$.ajax({
  method: "POST",
  url: url,
  data: data,
  dataType:'html'

});

我想这有助于您从Learn more中了解细节。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39329365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档