使用PHP / AJAX将数据插入MySQL数据库,在插入后执行成功选项(回调)

时间:2017-12-08 21:37:27

标签: javascript php jquery ajax callback

我一直在努力创建一个简单的网站,我无法完全理解这里所说的一些事情,其中​​一些事情也与我的情况无关。

该网站有一个包含3个输入框,一个按钮和一个列表的表单。单击提交按钮后,信息将通过单独的PHP文件提交到MySQL数据库。一旦信息在数据库中成功发送和更新,我应该将列表(它在div中)更新。到目前为止,我已经使它与异步一起工作:假,但我不应该,因为社会。

如果没有这个(坏)选项,列表在提交信息后就不会加载,因为(我假设)该方法是在它之后执行的,因为它不会等待它完成。

我在“成功:”中应该做些什么才能让它发挥作用? (或者,我在$ .ajax子句中读到了关于.done()的内容,但我不确定如何使其工作。)

回调应该是什么样的?我以前从来没有这样做过,因为每个案例都略有不同,我可能会对这里的结果感到迷失方向。

function save() {
    var name = document.getElementById('name');
    var email = document.getElementById('email');
    var telephone = document.getElementById('telephone');
	
    $.ajax({
        url: "save.php",
        method: "POST",
        data: { name: name.value, email: email.value, telephone: telephone.value },
        success: $("List").load(" List")
    });
}

先谢谢你,如果我需要包含更多信息,请不要犹豫。

3 个答案:

答案 0 :(得分:1)

从此评论中

  

据我所知success函数将在success上调用你应该使用complete,一个函数在请求完成时被调用(在success之后error回调被执行)。不是你想要的吗? - Muhammad Omer Aslam

我设法解决了这个问题,只需将$.load子句从success:选项移到complete:选项即可。 (我认为他们称之为选项)

我还没有管理错误处理,即使在我的脑海中,但至少它可以正常工作。

谢谢!

(赢了,直到2天才让我回答)

答案 1 :(得分:0)

我将向您展示我在项目中使用的一部分解决方案。我不能说它是最佳或最佳实践,但它适用于我并且可以为您工作:

PHP:

     function doLoadMails(){
       //initialize empty variable 
       $mails;

      $conn = new mysqli($_POST['ip'], $_POST['login'], $_POST['pass'], $_POST['db']);
         // Check connection
         if ($conn->connect_error) {
         die("");
             }
          //some select, insert, whatever  
         $sql = "SELECT ... ... ... ";
          $result = $conn->query($sql);

           if ($result->num_rows > 0) {
               // output data of each row, j is counter for rows
                $j =0;
              while($row_a = $result->fetch_assoc()) {    

             //for each row, fill array
            $mails[$j][0] = $row_a["name"] ; 
            $mails[$j][1] = $row_a["mail"] ; 
            $mails[$j][2] = $row_a["language"] ;         


                $j++;

                }
          }


        //if $mails has results (we added something into it)
          if(isset($mails)){
          echo json_encode($mails);/return json*/   }
          else{
//some error message you can handle in JS
echo"[null]";}



    }

然后在JS

function doLoadMails() {



    $.ajax({
        data: { /*pass parameters*/ },
        type: "post",
        url: "dataFunnel.php",
        success: function(data) { /*data is a dummy variable for everything your PHP echoes/returns*/
            console.log(data); //you can check what you get



            if (data != "[null]") { /*some error handling ..., in my case if it matches what I have declared as error state in PHP - !(isset($mails))*/ }
        }
    });

请记住,您可以直接回显/返回SQL请求的结果,并以更原始的格式将其放入JS中,并在此处理进一步的处理。

在您的解决方案中,您可能需要回显INSERT请求的返回码。

答案 2 :(得分:0)

我首先在一个函数内创建一个AJAX调用,该函数在页面加载时运行以填充列表。

window.onload = populatelist(); 

function populatelist() {
   $.ajax({
      type: "POST",
      url: "list.php",
      data: {function: 'populate'},
      success: function(data) { $("#list").html("data"); }
   });
}

注意:#list是指<div id="list>,您的列表应该在此内。

然后我会在另一个函数中进行另一个AJAX调用,该函数在提交表单时更新数据库。成功后,它将运行populatelist函数。

function save() {
   var name = document.getElementById('name');
   var email = document.getElementById('email');
   var telephone = document.getElementById('telephone');

   $.ajax({
       type: "POST",
       url: "list.php",
       data: {function: 'update', name: name.value, email: email.value, telephone: telephone.value },
       success: function() { populatelist(); }
   });
}

list.php应如下所示:

<?php

if($_POST['function'] == "populate") {
   // your code to get the content from the database and put it in a list
}

if($_POST['function'] == "update") {
   // your code to update the database
}

?>