我正在尝试将此表单中的数据发布到数据库中。我尝试过一些没有成功的教程。这是我的代码。有什么想法吗?
查看:
<form method="post" name="myForm1" id="myForm1" enctype="multipart/form-data" >
Email: <input type="text" name="email" id="email">
Question: <input type="text" name="qText" id="qText">
<input id="submitbutton" type="submit">
</form>
AJAX(在视图中,在表单下方)
<script type='text/javascript' language='javascript'>
$("#submitbutton").click(function(){
$.ajax({
url:'http://localhost:8888/index.php/trial/insert_into_db',
type: 'POST',
data: $("#myForm1").serialize(),
success: function(){
alert("success");
},
error: function(){
alert("Fail")
}
});
e.preventDefault();
});
</script>
控制器
function insert_into_db(){
$this->load->model('insert_db');
$this->insert_db->insertQ();
}
模型
class Insert_db extends CI_Model{
function insertQ(){
$email = $_POST['email'];
$qText = $_POST['qText'];
$this->db->query("INSERT INTO questions VALUES('','$email','$qText','','')");
}
}
答案 0 :(得分:5)
正如@David Knipe所说,在尝试访问其中一个元素之前,您应该等待DOM准备就绪。此外,您可能有e
未定义的错误,因为您没有将事件引用传递给click处理程序:
<script> //no need to specify the language
$(function(){
$("#submitbutton").click(function(e){ // passing down the event
$.ajax({
url:'http://localhost:8888/index.php/trial/insert_into_db',
type: 'POST',
data: $("#myForm1").serialize(),
success: function(){
alert("success");
$('#email').val('');
$('#qText').val('');
},
error: function(){
alert("Fail")
}
});
e.preventDefault(); // could also use: return false;
});
});
</script>
为了更完整,您的查询容易受到攻击,并且您可能在那里收到错误。利用在您下方拥有框架的优势:
function insertQ(){
$email = $this->input->post('email');
$qText = $this->input->post('qText');
$this->db->insert('questions', array('email' =>$email, 'text' => $text));
}
^_
我猜测列名是因为你没有指定它们
答案 1 :(得分:1)
您似乎忘了使用$.ready
。实际上,javascript在页面加载之前运行,这意味着它无法从$("#submitbutton")
中找到页面元素。试试这个:
$(document).ready(function() {
$("#submitbutton").click(function(){
....
....
});