Javascript 提交ajax表单并停留在同一页面不工作
我想在数据库中存储用户的评论。当用户提交时,我不想将其重定向到新页面。 我有以下代码,但它不工作 我的HTML代码:Javascript 提交ajax表单并停留在同一页面不工作,javascript,php,html,mysql,ajax,Javascript,Php,Html,Mysql,Ajax,我想在数据库中存储用户的评论。当用户提交时,我不想将其重定向到新页面。 我有以下代码,但它不工作 我的HTML代码: <form id="formA" action="test.php" method="post" enctype="multipart/form-data"> <input id="commentData" name="commentData" type="text" >' <input type="submit" value="toDb" id="
<form id="formA" action="test.php" method="post" enctype="multipart/form-data">
<input id="commentData" name="commentData" type="text" >'
<input type="submit" value="toDb" id="toDB" name="toDB" /></form>
这是我的PHP文件:
//Connect to database server
mysql_connect("localhost", "user", "") or die (mysql_error ());
mysql_select_db("test") or die(mysql_error());
$strSQL = "SELECT * FROM comments order by RAND() LIMIT 5";
$rs = mysql_query($strSQL);
if (!$rs) {
echo 'Could not run query ' . mysql_error();
exit;
}
$dt1=date("Y-m-d");
if(isset($_POST['toDB'])){
$dataA = $_POST['commentData'];
$sql = "INSERT INTO comments(id, comment, datum)VALUES(DEFAULT,'$dataA', '$dt1')";
$result=mysql_query($sql);
}
mysql_close();
当我单击submit按钮时,它将停留在同一页面上并显示警报,但输入字段的数据不会插入到我的数据库中。当我删除e.preventDefault()时,数据进入数据库,但页面重定向到test.php
尝试过不同的事情,但都想不出来。
有人能帮我吗?
提前谢谢 通过表单提交事件完成
var frm = $('#formA');
frm.submit(function(e) {
//....
//....
e.preventDefault();
});
是的,使用mysql\u real\u escape\u string($dataA)清理数据库插入,以防止SQL注入
编辑
抱歉,回答不完整(您仍然需要使用表单提交,而不是文档提交)
EDIT2:)错误地使用了$(this:)
EDIT2.5:enctype=“多部分/表单数据”
您需要进行一些修改:
var formData=新的formData(本)代码>
并为AJAX调用添加一些选项
mimeType:"multipart/form-data",
contentType: false,
cache: false,
processData:false
找到带有示例的此页面
请尝试使用大写/小写的POST
,如果不需要,请尝试删除多部分/表单数据(文件上载等)
EDIT3
对于多部分表单,在某些情况下,您可能应该在PHP中使用它来访问您的post数据$GLOBALS['HTTP\u RAW\u post\u data']
表单提交,并且由于表单上的action属性和正常的提交按钮,表单不会停留在同一页面上
这导致加载html后,可能也不会解释您的.submit()
方法,包括.preventDefault()
你可以这样做:
...
...
...
…这里的脚本。。。
javascript可以是以下内容:
(函数($)
{
var submit=$('input[id=toDB]');
$(提交)
(
“点击”,
功能(事件)
{
event.preventDefault();
var form=$(this.parent();
//获取表单字段
var data=$(form).serializeArray(),obj={},j=0;
对于(变量i=0;i
你自己去看看吧
你可以告诉它正在工作,因为你得到一个控制台错误,请求目标没有找到-404-虽然页面没有刷新,你留在原地…一个适当的页面提交给它完全工作
编辑
我修改了ajax()
调用中“data”的设置,以便将表单字段设置为POST变量[toDB]的json字符串
因此,在PHP中,您可以执行以下操作:
$datas = json_decode( $_POST['toDB'], true );
现在,您的$datas
变量是一个包含所有表单字段名称和值的关联数组。我不是100%同意下一条语句,但在使用json\u decode()
之前,您可能需要对发布的数据使用PHP的stripslashes()
方法
i、 e:
希望这有助于在脚本末尾添加return false,以防止重定向代码>在侧面$(文档)。提交(功能(e){
请检查一次。$dataA
应该进行消毒以防止注射。还有关于mysql的注意事项,应该使用mysqli或pdo,然后您可以使用准备好的语句。如果您给数据
一个默认时间戳,您就不必每次都插入日期。还有默认值
我以前没有见过,但是如果您让字段自动递增您不需要发送它。Thansk用于快速响应,但不幸的是它仍然无法工作。这些更改没有任何区别。您是否加载了jquery.min.js
?检查您的xhr请求包含的post数据。我使用.serialize()进行了快速测试
并且它没有包含您的PHP所依赖的提交按钮键或值。感谢您的帮助,但没有任何区别。仍然存在相同的问题。请使用控制台查看一些错误,可能会出现回答我的edit2块并检查该url,希望会有答案为您提供解决此问题的最佳解决方案是在test.php文件的顶部执行print_r($_POST);exit;,然后在jquery type console.log(html)的success函数中,查看您得到的输出是按原样发布的数据吗?我在所有编辑中都迷失了方向。您在哪里使用$GLOBALS['HTTP_RAW_POST_data']在我的PHP中,在第二次编辑中,您建议进行一些修改,这是否意味着替换var formData=$(this).serialize();使用var formData=new formData(this);使用此代码,我的控制台中出现了一个错误:此对象不支持Stringnify属性或方法
,我有一个输入错误。它被修复了,现在还有一个JSFIDLE链接。谢谢,它确实保持在同一页上,但没有插入到我的数据库中。我不明白。我已经尝试修复这个问题好几天了!是的,有了这个解决方案-我做了一个编辑,这样你就可以从你的PHP访问发布的数据了…请参阅上面的编辑
mimeType:"multipart/form-data",
contentType: false,
cache: false,
processData:false
$datas = json_decode( $_POST['toDB'], true );
//Connect to database server
mysql_connect( "localhost", "user", "" ) or die ( mysql_error() );
mysql_select_db( "test" ) or die( mysql_error() );
$strSQL = "SELECT * FROM comments order by RAND() LIMIT 5";
$rs = mysql_query( $strSQL );
if( !$rs )
{
echo 'Could not run query ' . mysql_error();
exit;
}
$dt1=date("Y-m-d");
if( isset( $_POST['toDB'] ) )
{
$datas = json_decode( stripslashes( $_POST['toDB'] ), true );
$dataA = $datas['commentData'];
$sql = "INSERT INTO comments( id, comment, datum )VALUES( DEFAULT, '" . $dataA . "', '" . $dt1 . "' );";
$result=mysql_query( $sql );
}
mysql_close();