2016-03-23 5 views
1

Ich habe ein Formular, das Daten an eine Serverseite paged, wo die Daten in eine MySQL-Datenbank eingefügt werden, und dann eine Zeile Anzahl der Datenbank durchgeführt wird und das Ergebnis an die Formularseite zurückgegeben, wo es dann angezeigt wird.Wie verzögere ich eine Ajax-Anfrage?

Ich benutze einen Ajax, um die Zeilenanzahl Daten zu holen und ich frage mich, ob es möglich ist, den Ajax Anruf zu verzögern, bis die Daten in die Datenbank eingefügt wurden, so dass ich eine genaue Zeilenanzahl erhalten kann Daten gerade eingereicht? Der aktuelle Code funktioniert, zeigt jedoch nur eine Zeilenanzahl an, bevor das Formular gesendet wurde. Ich muss die Seite neu laden, um ein echtes Ergebnis zu erhalten.

form.php

<form class="form-inline" action="" id="myform" form="" method="post"> 
<!-- Text input--> 
<div class="form-group"> 
    <label class="col-md-4 control-label" for="name"></label> 
    <div class="col-md-8"> 
    <input id="name" name="name" type="text" placeholder="name" class="form-control input-lg" required> 
    </div> 
</div> 

<!-- Button --> 
<div class="form-group"> 
    <label class="col-md-4 control-label" for="submit1"></label> 
    <div class="col-md-4"> 
    <button id="submitButtonId" name="submit1" class="btn btn-primary btn-xl">Submit</button> 
    </div> 
</div> 
</form> 

<div id="count"></div> 
</div> 

Die jquery

<script> 
//Post data from form 
$(document).ready(function(){ 
$("#submitButtonId").on("click",function(e){ 
    e.preventDefault(); 

var formdata = $(this.form).serialize(); 
    $.post('server.php', formdata, 
      function(data){ 
    //Reset Form 
$('#myform')[0].reset(); 
      }); 

return false; 
}); 
}); 
</script> 
<script> 

//Fetch Rowcount from server.php 
    $(document).ready(function(){ 
$.ajax({ 
        url: 'data.php', 
        dataType: "json", 
        success: function (data) { 
        $("#count").html(data.count); 

} 
}); 
}); 
</script> 

Server.php

<?php 
//Connect to db 
include_once("db_conx.php"); 
if(isset($_POST['name'])){ 
$name= mysqli_real_escape_string($db_conx,$_POST['name']); 

//Update Database 
$stmt = $db_conx->prepare('INSERT INTO myTable set name=?'); 
$stmt->bind_param('s',$name); 
$stmt->execute(); 
} 
//Count Rows 
$sql="SELECT name FROM myTable"; 
$query = mysqli_query($db_conx, $sql); 
    // Return the number of rows in result set 
    $rowcount=mysqli_num_rows($query); 

// send output 
$my_data=array(count=>"$rowcount"); 

echo json_encode($my_data,true); 
?> 
+1

andere Ajax innerhalb einer Erfolgsfunktion hinzufügen .. – santosh

+0

Wenn ich richtig verstehe, wollen Sie noch die Zeilenanzahl auf Seite Last geholt werden, aber aktualisiert, wenn mehr Daten eingefügt? – apokryfos

Antwort

1

Rufen Sie den Ajax, der die Zeilenanzahl innerhalb der Antwort des ersten Ajax Post abruft.

<script> 
//Post data from form 
$(document).ready(function(){ 
$("#submitButtonId").on("click",function(e){ 
    e.preventDefault(); 

    var formdata = $(this.form).serialize(); 
    $.post('server.php', formdata, 
      function(data){ 
       //Reset Form 
       $('#myform')[0].reset(); 
       fetchRowCount(); 
    }); 

    return false; 
}); 
}); 

function fetchRowCount() { 
    $.ajax({ 
        url: 'data.php', 
        dataType: "json", 
        success: function (data) { 
         $("#count").html(data.count); 

        } 
    }); 
} 
</script> 
+0

Das funktioniert, wie ich gehofft habe. Vielen Dank. – JulianJ

0

Sie die Zählung Zeile Funktion nach der Post wie folgt aufrufen können:

$.post('server.php', formdata, 
    function(data) { 
     //Reset Form 
     $('#myform')[0].reset(); 
     $.ajax({ 
      url: 'data.php', 
      dataType: "json", 
      success: function(data) { 
       $("#count").html(data.count); 
      });) 
    }); 
0

Wenn ich aus dem Code richtig verstanden habe, sehe ich, dass der Fetch Rowcount auf $ (document) .ready ausgeführt wird. Es bedeutet, dass einmal (und jedes Mal) die Seite geladen wird, wird es ausgeführt. So geschieht es das:

1) die Seite

2) die Fetch rowcount ausgeführt wird

Sie

3)

einreichen

4) Sie die Seite neu laden müssen, um zu gehen geladen wird Punkt 2.

Also die Lösung ist, den Zeilenabruf als eine Rückruffunktion auszuführen, nachdem das Senden ausgeführt wurde, nicht auf Dokument bereit.

+0

Das hört sich gut an und fragt sich, wie ich das machen könnte? – JulianJ

Verwandte Themen