我不太确定你真的想用这个实现什么
if(response == 1)
{
form.submit();
}
else
{
e.preventDefault();
return false;
}
这根本没有意义,而且很难理解你想要什么,因为你并没有真正回应上面的 cmets。
我不确定您是否有某种验证,如果用于验证,您可以使用jQuery Validation Plugin 在前端进行验证,然后在服务器上使用服务器端进行验证。
另外,您不会向服务器端发送任何数据。
你的脚本应该是这样的:
<form id="myform" method="post" action="">
<input type="text" name="username" id="username" value="test" />
<input type="submit" name="submit" id="submit" value="Save" />
</form>
<script>
$('#myform').on('submit', function (event)
{
event.preventDefault();
var formdata = $('#myform').serialize();
$.ajax({
url: 'url',
type: 'POST',
data : formdata,
dataType : 'json',
encode : true,
success: function (response)
{
if(response == "What you expected")
{
// DO something else
}
else
{
// Write the error back to the user in some div
}
}
});
});
</script>
编辑:如果您想在提交之前进行验证,您可以使用我上面提到的库,这就是您的方式
<script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/jquery.validation/1.16.0/jquery.validate.min.js"></script>
<form id="myform" method="post" action="">
<input type="text" name="username" id="username" />
<input type="submit" name="submit" id="submit" value="Save" />
</form>
<script>
$('#myform').validate({
rules :{
username :{
required : true,
}
},
messages :{
username : {
required : "Enter username",
}
},
submitHandler : sendData
});
function sendData(){
var formdata = $('#myform').serialize();
$.ajax({
url: 'url',
type: 'POST',
data : formdata,
dataType : 'json',
encode : true,
success: function (response)
{
if(response == "What you expected")
{
// DO something else
}
else
{
// Write the error back to the user in some div
}
}
});
return false; //prevent form traditional submission
}
</script>
也不要忘记在服务器端进行验证
更多编辑
您说您要发送请求并再次发送的原因是因为您想检查会话是否存在,那么您可以在向用户显示表单之前执行此操作,如果会话存在则显示表单或显示错误或其他内容
这就是你要做的。
<script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/jquery.validation/1.16.0/jquery.validate.min.js"></script>
<?php
if(isset($_SESSION['name']) && !empty($_SESSION['name'])){?>
<form id="myform" method="post" action="">
<input type="text" name="username" id="username" />
<input type="submit" name="submit" id="submit" value="Save" />
</form>
<script>
$('#myform').validate({
rules :{
username :{
required : true,
}
},
messages :{
username : {
required : "Enter username",
}
},
submitHandler : sendData
});
function sendData(){
var formdata = $('#myform').serialize();
$.ajax({
url: 'url',
type: 'POST',
data : formdata,
dataType : 'json',
encode : true,
success: function (response)
{
if(response == "What you expected")
{
// DO something else
}
else
{
// Write the error back to the user in some div
}
}
});
return false;
}
</script>
<?php
}else{
// the session is not set then do nothing or show error/redirect
}
?>
然后在您的服务器端,您还需要在接受和处理用户输入之前检查是否存在相同的会话。
<?php
session_start();
if(isset($_SESSION['name']) && !empty($_SESSION['name'])){
//DO FORM PROCCESSING
}else{
echo json_encode('not set');
// send not set back to the client and do something about that response.
}
?>