我在onSubmit中调用了一个jquery函数 如果状态为false,则不允许表单提交 但目前,它将提交页面
这是我的整个代码 php表格
echo "<form name='formulaire' id='my_form' method='POST' action='presale_pay.php' onSubmit='return veriftel();'>";
echo "<input type='text' name='promocode' placeholder='Enter Promo Code' id='promo'><div id='result'></div>";
echo "<p> <input type='submit' value='CONFIRM'></form>";
promocheck.php
<?php
include("include/control.php");
if (SessionValide ($session, $bd))
{
$data=array();
$promo=$_POST["promo"];
$party=$bd->ligneSuivante($bd->execRequete("SELECT * FROM promocodes WHERE promocode='$promo' AND used_nbr<=valid_nbr"));
if(!empty($party))
{
$data["status"]=true;
$data["percentage"]=$party["percentage"];
}
else {
$data["status"]=false;
}
echo json_encode($data);
}
?>
function veriftel(e)
{
$.ajax({
type: 'post',
url: 'promocheck.php',
data:{promo:$("#promo").val()},
dataType: 'json',
success: function (data) {
if(data.status==false)
{
$("#result").html("<font color=red>Invalid promocode</font>");
return false;
}
else
{
return true;
}
}
});
}
请帮我阻止表单提交
答案 0 :(得分:2)
问题是以下ajax调用是异步调用。您的代码不会等到您从服务器获得响应,因此该函数在完成ajax调用和响应之前返回。
为避免以下问题,您必须使您的ajax调用同步。添加 $.ajax({
type: 'post',
async: false, //syncronous call
url: 'promocheck.php',
data:{promo:$("#promo").val()},
dataType: 'json',
success: function (data) {
}
以使其同步
g++ `pkg-config --cflags opencv` vehicleDetection.cpp `pkg-config --libs opencv`
请注意,同步调用将导致javascript执行冻结在网页中。
答案 1 :(得分:2)
应该像这样工作
function veriftel(e)
{
e.preventDefault();
$.ajax({
type: 'post',
async: false,
url: 'promocheck.php',
data:{promo:$("#promo").val()},
dataType: 'json',
success: function (data) {
console.log(data);
if(data.status==false)
{
$("#result").html("<font color=red>Invalid promocode</font>");
console.log("false");
return false;
}
else
{
console.log("true");
return true;
}
}
});
}
php代码也应该将事件传递给函数
echo "<form name='formulaire' id='my_form' method='POST' action='presale_pay.php' onSubmit='return veriftel(event);'>";