CI_model没有正确捕获POSTed JSON数据

时间:2012-03-06 21:41:21

标签: php javascript ajax json codeigniter

经过大量的编码,我觉得我终于在一定程度上围绕着AJAX,JSON和CI。

然而,我觉得我遇到了最后的障碍。以下是我的代码:

HTML

<div id="structures">
    <h1>Build</h1>
    <form name="buildForm" id="buildForm" method="POST" action="<?php echo base_url(); ?>/ajax/index/">
        <select name="buildID" class="buildClass">
        <option value="0" selected="selected" data-skip="1">Build a Structure</option>
<?php foreach ($structures as $structure_info): ?>
    <option name='<?php echo $structure_info['str_name'] ?>' value='<?php echo $structure_info['str_id'] ?>' data-icon='<?php echo $structure_info['str_imageloc'] ?>' data-html-text='<?php echo $structure_info['str_name'] ?><i>
        <?php echo $structure_info['timebuildmins'] ?> minutes<br><?php echo $structure_info['buy_gold'] ?> gold</i>'><?php echo $structure_info['str_name'] ?></option>
<?php endforeach ?>
        </select>
        <div id="buildSubmit">
            <input id ="btnSubmit" class="button" type="submit" value="Submit"/>
        </div>
    </form>
</div>

我只是在构建我的表单。

AJAX / JS

$(function(){
    $("#buildForm").click(function(e, buildID){
        e.preventDefault();
        var frm = $(document.buildForm);
        var dat = JSON.stringify(frm.serializeArray());
        alert("I am about to POST this:\n\n" + dat);
        $.post(
            frm.attr("action"),
            dat,        
        function(response) 
        {  
            alert(response);
        }  
    );
});
});

模型功能

public function insert_build()
   {    
      $str_id = $this->input->post(dat);
      print_r($str_id);
   }

我创建了一个新的控制器类扩展“Ajax”和函数“index”这只是调用我的模型“insert_build”。我的解决方法是将.js文件从页面中取出并保存在标题中。

反正。当我点击提交按钮时,它成功警告JSON输出。虽然在传递给controller-&gt;模型后,它似乎无法捕捉到任何地方。我认为我做错了,但无法弄清楚是什么。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

在这里尝试几件事。

var frm = $(document.buildForm);尝试提醒其动作值

之后
alert(frm.attr("action"));

确保您的$.post实际上获得了有效的网址。

然后尝试更改insert_build功能,以便打印出它接收的内容。您不应该致电$this->input->post(dat);,因为您没有找到名为dat的帖子。

public function insert_build()
{
    print_r($_POST);
}

修改

您需要将json字符串作为url参数传递。尝试

$.post(frm.attr("action"), {data:dat}, function(response) 
    {  
        alert(response);
    });

然后将PHP更改为

public function insert_build()
{    
    $str_id = $this->input->post('data');
    print_r(json_decode($str_id));
}

答案 1 :(得分:1)

为什么不使用$ .ajax?

$('#buildForm').live('click', function(event){
 var data = $('form[name="buildForm"]').serialize();
  $.ajax({
         url:'<?php echo base_url(); ?>ajax',
         data:data,
         type:'post',
         success:function(result){
            alert(result);
         },
         error:function(result){
            alert(result);
         }
  });
});

希望这会有所帮助