经过大量的编码,我觉得我终于在一定程度上围绕着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;模型后,它似乎无法捕捉到任何地方。我认为我做错了,但无法弄清楚是什么。
感谢您的帮助。
答案 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);
}
});
});
希望这会有所帮助