我的表单提交和jquery问题

时间:2018-05-05 17:56:36

标签: javascript php jquery ajax

我在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;
             }
            }
          });
}

请帮我阻止表单提交

2 个答案:

答案 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);'>";