jQuery / AJAX和PHP-使用.load()函数时

时间:2018-07-28 11:02:19

标签: javascript php jquery ajax forms

我的网站上有一个注册页面,我想为其执行PHP和AJAX验证。我将显示我的代码模板(我的代码更大),以尝试解释问题。

registration.php

<!DOCUMENT html>
<html>
 <head>
  <script>
   $(document).ready(function(){
    $("#signupForm").submit(function(event){
     event.preventDefault();
     var firstNameInput = $("#firstName").val();
     var lastNameInput = $("#firstName").val();
     $(".messageForm").load("inculdes/signup.script.php", {
      firstName: firstNameInput,
      lastName: lastNameInput
     });
    });
   });
  </script>
 </head>
 <body>
  <form id="signupForm" action="includes/signup.script.php" method="POST">
   <input id="firstName" type="text" name="firstName">
   <input id="firstName" type="text" name="firstName">
   <button id="submit" name="submit" type="submit">Submit</button>
   <div class="messageForm"></div>
  </form>
 </body>
</html>

signup.script.php

 <?php
  if (isset($_POST['submit'])) {
   include "dbconn.script.php";

   $firstName = $_POST['firstName'];
   $lastName = $_POST['lastName'];

   //Validators for inputs in PHP with various error messages (1-15) and database INSERT and SELECT functions.
   ...

  } else {
     echo "<span>Error 16</span>";
     exit();
    }
  }
 ?>

 <script>
  // JQuery validator for inputs and CSS style changers based on errors
  ...
 </script>

我的问题是,当我单击Submit按钮时,收到错误消息“ Error 16”,因此我的函数跳过了整个PHP脚本,并且没有将数据插入数据库。我的结论是,问题是因为未设置变量$_POST['submit'],因为当我将第一行代码更改为if (!isset($_POST[submit'']))时,它的作用就像是魅力,但是我不想散失阻止用户执行以下操作的功能:在浏览器的URL字段中键入signup.script.php并运行它。如何纠正此问题?我看过的教程中有此代码,在这种情况下,它可以正常工作。

P.S。如果需要解决此问题,我将扩展我的代码,因为我想节省空间,所以我给出了它的简写版本。

3 个答案:

答案 0 :(得分:3)

您只是不随请求一起发送“提交”。 您可以在此处添加它:

$(".messageForm").load("inculdes/signup.script.php", { 
   firstName: firstNameInput, 
   lastName: lastNameInput, 
   submit: 1 
});

或检查isset($_POST['firstName'])

边注::如果没有使用load()传递的对象,则将是GET请求。值得记住...

  

请求方法

     

如果将数据作为对象提供,则使用POST方法。否则,假定为GET。

The Docs

答案 1 :(得分:0)

根据jQuery.load()(这是一种简写的jQuery.ajax方法)的jQuery文档,这听起来像是$_GET而不是$_POST。 ..最好将jQuery.ajax()之类的东西与method: 'POST'结合使用-或在PHP中检查$_GET

答案 2 :(得分:0)

亲爱的仔细检查您的JavaScript代码

event.preventDefault(); // Preventing default form submission

$(".messageForm").load("inculdes/signup.script.php", {
      firstName: firstNameInput,
      lastName: lastNameInput
});

仅将firstName和lastName发布到signup.script.php

您正在尝试检查isset($_POST['submit']) 直到您在帖子中传递“提交”(例如firstName和lastName)之前,肯定是错误的

$(".messageForm").load("inculdes/signup.script.php", {
      firstName: firstNameInput,
      lastName: lastNameInput,
      submit: 'yes'
});

希望有帮助