ajax和codeigniter发布dataString和receive数组

时间:2013-03-29 01:28:54

标签: jquery ajax codeigniter

我有这个视图,我以 contactForm

的形式收集名为 MYVAR 的密钥
<form class="form-wrapper cf" id="contactForm">
   <input name="MYVAR" type="text" placeholder="DO_IT..." required>
   <button type="submit" id="btn_submit" >  DO IT </button>
</form>

然后在这个视图中我有一个脚本通过ajax将此键发送到控制器 dataString

<script type="text/javascript">
jQuery(function() {
    jQuery(".btn_submit").click(function() {
    var MYVAR       = jQuery("input#MYVAR").val();
    var dataString  = 'MYVAR='+ MYVAR;
    alert(dataString);
    jQuery.ajax({
        type: "POST",
        url: "<?php echo base_url()?>index.php/do_it/method/",
        data: dataString,
        success: function() {
            jQuery('#successMessage').html("<b><p style='color:#5b5b5b; float:left; margin-top:3px; padding-top:50px;'>success.</p></b><br/><br/>")
            .hide()
            .fadeIn(1500, function() {
            jQuery('#successMessage');
            });
        }
    });
    return false;
    });
});
</script>

方法内的控制器do_it中,我会读取var MYVAR

function method()
{   
  //posted var
  $key = $this->input->post('MYVAR');
  $this->load->model('mine_model');
  //get data according key variable 
  $data['result'] = $this->mine_model->get( array('data' => $MYVAR));
  //encode it? 
  echo json_encode($data); 
  //$this->load->view('view',$data);
}

但是没有做任何事......

我错过了什么?

此外,我不知道如何使用jQuery在视图中接收$ data ['result']然后在视图中打印它?

2 个答案:

答案 0 :(得分:1)

尝试此代码后

jQuery(function() {
    jQuery(".btn_submit").click(function() {
        alert(jQuery("input#MYVAR").val());
        jQuery.ajax({
            type: "POST",
            url: "<?php echo base_url()?>index.php/do_it/method/",
            data: {MYVAR:jQuery("input#MYVAR").val()},
            success: function() {
                jQuery('#successMessage').html("<b><p style='color:#5b5b5b; float:left; margin-top:3px; padding-top:50px;'>success.</p></b><br/><br/>")
                .hide()
                .fadeIn(1500, function() {
                jQuery('#successMessage');
                });
            }
        });
        return false;
    });
});

在控制器中只发送这样的数据* (你已经完成) *

echo json_encode(array('success'=> 'true', 'data' => array(1,2,3)))

但在您的视野中success()需要更改为success(response)

您可以像这样使用json结果

success: function(response) {
    if(response.status){
        jQuery('#successMessage').html("<b><p style='color:#5b5b5b; float:left; margin-top:3px; padding-top:50px;'>success.</p></b><br/><br/>")
        .hide()
        .fadeIn(1500, function() {
        jQuery('#successMessage');
        });

        //response.data[0] gives 1
        //response.data[1] gives 2
        //response.data[2] gives 3
    }
}

答案 1 :(得分:1)

我有一些代码可以按照您的意愿执行:

我的JS:

$(function() {
  $('#contactForm').submit(function() {
    var dataString = $(this).serialize();
    $.ajax({
      type : 'post',
      url  : '<?php echo base_url()?>index.php/do_it/method/',
      data : dataString,
      dataType : 'json',
      success : function(res) {
        console.log(res); // to see the object
        // your code here
      }
    });
    return false;
  });
});

我的PHP(CodeIgniter)

function method() { 
  $key = $this->input->post('MYVAR');
  $this->load->model('mine_model');
  $data['result'] = $this->mine_model->get( array('data' => $MYVAR));

  // set text compatible IE7, IE8
  header('Content-type: text/plain'); 
  // set json non IE
  header('Content-type: application/json'); 

  echo json_encode($data);
}