Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 提交ajax表单并停留在同一页面不工作_Javascript_Php_Html_Mysql_Ajax - Fatal编程技术网

Javascript 提交ajax表单并停留在同一页面不工作

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="

我想在数据库中存储用户的评论。当用户提交时,我不想将其重定向到新页面。 我有以下代码,但它不工作

我的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="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();