gpt4 book ai didi

javascript - 提交 ajax 表单并停留在同一页面上不起作用

转载 作者:可可西里 更新时间:2023-11-01 08:29:37 24 4
gpt4 key购买 nike

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

我的 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>

Javascript:

var frm = $('#formA');

$(document).submit(function(e) {
e.preventDefault();

$.ajax({

url: frm.attr('action'),

type: frm.attr('method'),

data: frm.serialize(),

success: function(html) {

alert('ok');

}

});
});

这是我的 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();

当我单击提交按钮时,它将停留在同一页面并显示警报,但输入字段的数据未插入到我的数据库中。当我删除 e.preventDefault() 时,数据进入数据库但页面重定向到 test.php

尝试了不同的东西,但无法弄清楚。有人可以帮我吗?提前致谢!

最佳答案

表单提交和不停留在同一个页面是因为表单上的action属性,以及正常的提交按钮。

这导致您的 .submit() 方法包括 .preventDefault() 可能在加载 html 后也没有被解释。

您可以按照以下方式做一些事情:

<html>
...
<body>
...
<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>
...
</body>
<script>
...script here...
</script>
</html>

javascript 可能类似于:

( function( $ )
{
var submit = $( 'input[id=toDB]' );
$( submit ).on
(
'click',
function( event )
{
event.preventDefault();
var form = $( this ).parent();

// Get form fields
var data = $( form ).serializeArray(), obj = {}, j = 0;
for( var i = 0; i < data.length; i++ )
{
if( data[i].name in obj )
{
var key = data[i].name + '_' + j;
obj[key] = data[i].value;
j++;
}
else
{
obj[data[i].name] = data[i].value;
}
};

// Make AJAX request
$.ajax
(
{
url: $( form ).attr( 'action' ),
type: 'POST',
data: 'toDB=' + JSON.stringify( obj ),
success: function( data, textStatus, xhr )
{
// Do something with data?
...
alert( 'ok' );
}
}
);
}
);
}( jQuery )
);

参见 jsfiddle为你自己。

你可以说它正在工作,因为你收到一个控制台错误,指出找不到请求目标 - 404 - 虽然页面没有刷新,但你留在原地...有一个正确的页面提交给它工作完全。

编辑

我在 ajax() 调用中修改了“数据”的设置,以便将表单字段设置为 POST 变量 [toDB] 的 json 字符串。

所以在你的 PHP 中你会这样做:

$datas = json_decode( $_POST['toDB'], true );

现在您的 $datas 变量是一个包含所有表单字段名称和值的关联数组。我不是 100% 支持下一条语句,但在使用 json_decode()

之前,您可能需要对 POSTED 数据使用 PHP 的 stripslashes() 方法

即:

//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();

希望对你有帮助

关于javascript - 提交 ajax 表单并停留在同一页面上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30559944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com