Javascript Ajax提交表单没有';不重新加载页面,但不';t柱
帮助,我真的不熟悉ajax,我想在不重新加载页面的情况下提交表单。使用下面的代码,它没有重新加载,但肯定没有发布或甚至没有调用ajax函数Javascript Ajax提交表单没有';不重新加载页面,但不';t柱,javascript,php,jquery,ajax,forms,Javascript,Php,Jquery,Ajax,Forms,帮助,我真的不熟悉ajax,我想在不重新加载页面的情况下提交表单。使用下面的代码,它没有重新加载,但肯定没有发布或甚至没有调用ajax函数 <script type="text/javascript"> $(function() { //this submits a form $("#post_form").on("submit", function (e) { e.preventDefault(); $.ajax({
<script type="text/javascript">
$(function() {
//this submits a form
$("#post_form").on("submit", function (e) {
e.preventDefault();
$.ajax({
type: "POST",
url: "post.php",
data: $("#post_form").serialize(),
beforeSend: function() {
$('#input_process').html('Loading');
},
success: function(data) {
$('#input_process').html(data);
},
failure: function(){
$('#input_process').html('Failed');
}
})
})
})
</script>
$(函数(){
//这将提交一个表单
$(“post#U form”)。关于(“提交”,功能(e){
e、 预防默认值();
$.ajax({
类型:“POST”,
url:“post.php”,
数据:$(“#post_form”).serialize(),
beforeSend:function(){
$('#input_process').html('Loading');
},
成功:功能(数据){
$(“#输入#处理”).html(数据);
},
失败:函数(){
$(“#输入_进程”).html('Failed');
}
})
})
})
这是html表单代码
<div id="input_process"></div>
<div id="story_post_input">
<form name="post_form" id="post_form" action="" method="POST">
<input type="hidden" name="post_type" value="story" />
<input type="text" name="post_title"/>
<textarea name="userpost"></textarea>
<input type="submit" name="post_submit" value="post" id="post_submit_button"/>
</form>
</div>
<div id="shout_post_input">
<form name="post_form" id="post_form" action="" method="POST">
<input type="hidden" name="post_type" value="shoutout" />
<input type="text" name="userpost"/>
<input type="submit" name="post_submit" value="shout" id="post_submit_button"/>
</form>
</div>
<div id="image_post_input">
<form name="post_form" id="post_form" action="" method="post" enctype="multipart/form-data">
<input type="file" name="post_image">
<input type="hidden" name="post_type" value="image" />
<input type="text" name="userpost"/>
<input type="submit" name="post_submit" value="upload" id="post_submit_button"/>
</form>
</div>
下面是post.php代码
<?php
if(isset($_POST['userpost'])){
$post_type = $_POST['post_type'];
if($_POST['post_type']=="shoutout"){
$post = $_POST['userpost'];
$query = 'INSERT INTO tblpost (post_content, post_date, post_userID, poster, post_type) VALUES ("'.$post.'", now(), "'.$_SESSION["user_ID"].'", "'.$_SESSION["username"].'", "'.$post_type.'" )';
$result = mysql_query($query) or mysql_error();
$tmp_post_ID = mysql_insert_id();
$type = "post";
notify($type, $tmp_post_ID);
}
if($_POST['post_type']=="story"){
$post_title = $_POST['post_title'];
$post = $_POST['userpost'];
$query = 'INSERT INTO tblpost (post_content, post_date, post_userID, poster, post_type, post_title) VALUES ("'.$post.'", now(), "'.$_SESSION["user_ID"].'", "'.$_SESSION["username"].'", "'.$post_type.'", "'.$post_title.'" )';
$result = mysql_query($query) or mysql_error();
$tmp_post_ID = mysql_insert_id();
$type = "post";
notify($type, $tmp_post_ID);
}
if($_POST['post_type']=="image"){
$tmp_name = $_FILES['post_image']['tmp_name'];
$user_ID = $_SESSION['user_ID'];
$post = $_POST['userpost'];
$img_ID = upload_image($tmp_name,$user_ID);
$query = 'INSERT INTO tblpost (post_content, post_date, post_userID, poster, post_type, img_ID) VALUES ("'.$post.'", now(), "'.$_SESSION["user_ID"].'", "'.$_SESSION["username"].'", "'.$post_type.'", "'.$img_ID.'" )';
$result = mysql_query($query) or mysql_error();
$tmp_post_ID = mysql_insert_id();
$type = "image";
notify($type, $tmp_post_ID);
}
//header('location:'.curPageURL());
}
?>
似乎您需要更改表单代码,POST后缺少双引号,并且不需要添加onsubmit属性,因为您已经在jQuery上处理了该属性
<form name="post_form" id="post_form" action="" method="POST">
<input type="hidden" name="post_type" value="post" />
<input type="text" name="userpost"/>
<input type="submit" name="post_submit" value="post" id="post_submit_button"/>
</form>
请告诉我您的进展情况更改为此
$(document).on("submit","#post_form", function (e) {...
或者
并从表单中删除此项
onsubmit="return false;"
编辑**
根据你的最新帖子
它不起作用的原因是因为您使用的是多个表单,且具有一个#ID。这是非法的
<form name="post_form" id="post_form" action="" method="POST">
<input type="hidden" name="post_type" value="story" />
<input type="text" name="post_title"/>
<textarea name="userpost"></textarea>
<input type="submit" name="post_submit" value="post" id="post_submit_button"/>
</form>
<form name="post_form" id="post_form" action="" method="POST">
<input type="hidden" name="post_type" value="shoutout" />
<input type="text" name="userpost"/>
<input type="submit" name="post_submit" value="shout" id="post_submit_button"/>
</form>
<form name="post_form" id="post_form" action="" method="post" enctype="multipart/form-data">
<input type="file" name="post_image">
<input type="hidden" name="post_type" value="image" />
<input type="text" name="userpost"/>
<input type="submit" name="post_submit" value="upload" id="post_submit_button"/>
</form>
当您将数据从ajax传递到php时
data: {variable : variable}, //var variable = $("#post_form").serialize(); and check your variable before pass it
并在php中获得它
echo ($_POST['variable']);
你的代码工作得很好。() 将您的表格(按照KyleK的建议)更改为: 在PHP脚本中,只需简单地执行以下操作:
echo 'uwotm8';
确保您的ajax正确运行。没错,错误是我输入代码请求帮助时出现的,哈哈。问题不在我的原始代码中。但是仍然不起作用:/hahaha好的,那么,你能更新这个问题,把你的post.php代码也放在这里吗?我把jsfiddle放在这里:看起来很好(jsfiddle抛出错误,因为php不在那里)。我同意KyleK的观点,错误在jquery上,因为如果您已经放置了preventDefault(),那么当您单击submit时,您的表单将无法重新加载。控制台上是否有错误?如果
e.preventDefault()代码>不工作,请尝试返回false代码>在绑定结束时。另外,确保bind实际上是通过console.log('derp')之类的东西被调用的我尝试了这个方法并删除了onsubmit代码。但这并没有真正改变什么。ajax函数仍然没有被调用,自从我删除了onsubmit之后,它又开始重新加载页面了。这表明jquery并没有真正起作用。您确定已正确加载脚本吗?在使用$(文档)之前,必须将它们加载到头文件中。进行快速测试,例如$('#post_form').hide();只是为了检查jquery是否真的在工作是的,我的其他脚本加载得非常好。这是唯一一个让我头疼的。你对每个表单都使用了多个ID。如果您想以ajax的形式单独提交每一篇文章。他们都需要单独的ID让我知道我的解决方案是否适合你。应该这样。您遇到的问题是,您的代码不知道引用了哪个#post#表单,因为它们都有该ID。这样,您只需拉取父表单并提交,我真的认为我使用的版本可能是问题所在。我目前使用的是1.11.1,可以吗?应该可以,我在上面发布的示例中使用了它。我尝试单击示例,但它显示了我使用的代码,而不是您的代码:/I我使用了您的确切代码,整个脚本工作正常。您需要更改php脚本并从中进行调试。从echo json_encode($_POST)开始代码>并查看您是否正在取回数据!
data: {variable : variable}, //var variable = $("#post_form").serialize(); and check your variable before pass it
echo ($_POST['variable']);
<form name="post_form" id="post_form" action="" method="POST">
.....
$.ajax( {
type: "POST",
url: "post.php",
data: $("#post_form").serialize(),
success: function(data) {
console . log(data);
}
});
echo 'uwotm8';