2012-03-06 69 views
0

经过大量编码后,我觉得我终于围绕AJAX,JSON和CI在一定程度上围绕我的脑袋。CI_model无法正确捕获POST JSON数据

但是,我觉得我已经击中了一个最后的障碍。下面是我的代码:

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); 
     } 
    ); 
}); 
}); 

型号功能

我创建了一个新的控制器类扩展 “阿贾克斯” 和功能 “指数” 这一简单的调用我的模型“insert_build。 “我的解决方法是将.js文件从页面中取出并保存在页眉中。

无论如何。当我点击提交按钮时,它会成功警告JSON输出。虽然它传递给控制器​​ - >模型后,它似乎没有捕捉到任何地方。我假设我做错了,但无法弄清楚什么。

感谢您的帮助。

+0

不知道,如果它只是你如何粘贴成左右,但“这 - $>输入 - >后(DAT)”应为“$这个 - >输入 - >后('dat')“ – Tjkoopa 2012-03-06 23:16:14

+0

一个小提示,可能会在未来帮助你。给console.log一个尝试,而不是警报。它只是让事情更优雅;)。 – 2012-03-07 07:46:20

回答

1

在这里尝试几件事。

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

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

,以确保您$.post实际上是得到一个有效的URL。

然后尝试更改您的insert_build函数以打印出它正在接收的内容。您不应该致电$this->input->post(dat);,因为您不会有一个名为dat的帖子。

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

编辑

你需要的JSON字符串传递的网址PARAM。尝试

$.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)); 
} 
+0

谢谢。该动作指向一个带有两个斜杠(//)的URL,虽然即使在修复此错误之后,它仍然返回并用“print_r($ _ POST)”返回空数组; – 2012-03-06 22:30:07

+0

我认为它可能与“stringify”有关ajax。当我删除它时,提交返回了我正在寻找的值。任何解释为什么会非常有帮助!谢谢 – 2012-03-06 23:03:38

+0

@RickyMason检查我的编辑。 – 2012-03-07 00:46:50

1

为什么不使用$阿贾克斯?

$('#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); 
     } 
    }); 
}); 

希望这有助于