2016-04-21 10 views
0

Also ich habe eine ähnliche Frage hier zuvor gestellt und bekam eine Antwort, die jedoch funktionierte, nachdem ich in meinem Anfängerprojekt und Einführung in Ajax Fortschritte gemacht habe, bin ich auf ein anderes Problem gestoßen. Es scheint, dass der AJAX-Aufruf nicht erfolgreich ist..bis die Seite neu geladen wird. Ich habe dieses Problem vor dem Hinzufügen weiterer Textfelder zu meinem Formular bemerkt, aber ich kann mir nicht vorstellen, wie das zusammenhängen könnte. Eine spätere Abfrage hängt davon ab, ob das Formular erfolgreich übergeben wurde, aber ich möchte nicht, dass der Benutzer die Seite aktualisiert, nur damit diese Daten tatsächlich in die Datenbank übertragen werden. Irgendwelche Vorschläge?jQuery AJAX-Aufruf fehlgeschlagen bis nach der Aktualisierung

<form action="call.php" method="post"> 
    <input class="oomText" type="text" name="accountName" placeholder="Account Name"><br> 
    <h2 class="oomHead2">Email Notifcations For Phone Calls</h2> 
    <input class="oomText" type="text" name="accountEmailOne" placeholder="Email Recipient 1*"><br> 
    <input class="oomText" type="text" name="accountEmailTwo" placeholder="Email Recipient 2*"><br> 
    <input class="oomText" type="text" name="accountEmailThree" placeholder="Email Recipient 3*"><br> 
    <h2 class="oomHead2">Text Notifcations For Phone Calls</h2> 
    <input class="oomText" type="text" name="accountTextOne" placeholder="Text Recipient 1*"><br> 
    <input class="oomText" type="text" name="accountTextTwo" placeholder="Text Recipient 2*"><br> 
    <input class="oomText" type="text" name="accountTextThree" placeholder="Text Recipient 3*"><br> 
    <small>*Fields are <b>not</b> required to be filled out</small><br> 
    <input class="oomButton submit" type="submit" name="submit" value="submit"> 
    <script> 
     $(document).ready(function(){ 
      $('.oomButton.submit').click(function(){ 
       var clickBtnValue = $(this).val(); 
       var ajaxurl = 'http://clients.oomdo.com/provision/ajax.php', 
       data = {'action': clickBtnValue}; 
       $.post(ajaxurl, data, function (response) { 
       alert("Account Created"); 
       }); 
      }); 
     }); 
    </script> 
    </form> 

..Later auf in der PHP-Datei

if ($_SESSION['submitted'] == true){ 
    // do something 
    } 

ajax.php

<?php 
     session_start(); 
     if (isset($_POST['action'])) { 
      switch ($_POST['action']) { 
       case 'submit': 
        submit(); 
        echo 'Hurrah'; 
      } 
     } 

     function submit() { 
      $_SESSION['submitted'] = true; 
     } 

    ?> 
+1

'data = { 'action': clickBtnValue};' sollte nur sein 'data = {Aktion: clickBtnValue};' – larsAnders

+0

Haben Sie die AJAX-Request/Response in der schaut Browser-Entwickler-Tools? Werden Fehler gemeldet? Laufen Sie das auf einem Webserver? –

+0

Sie haben ein Postformular mit einem Absenden-Button und dann senden Sie auch über den Ajax. Dies ist redundant. Wenn Sie nicht möchten, dass die Seite aktualisiert wird, können Sie das Formular beenden, aber die Eingabefelder lassen, die Informationen in das Datenobjekt sammeln und über Ajax posten. Keine Form notwendig. – nurdyguy

Antwort

0

Ich bin ein wenig rostig, mit mir so kahl, aber ich denke, Du hast vergessen, dass AJAX asynchron ist, was bedeutet, dass AJAX erst später passiert.

Also, in Ihrem Beispiel haben Sie den AJAX-Anruf durchgeführt, DANN hat Ihre Sitzung überprüft, DANN hat der Anruf seine Funktion beendet (dauert länger wegen der höheren Datenmenge). Deshalb sieht es den neuen Wert nach der Aktualisierung.

Sie haben 3 Möglichkeiten:

  1. Fügen Sie die //do something Anweisung in Ihre success Funktion.

Codebeispiel:

$.post(ajaxurl, data, function (response) { 
    alert("Account Created"); 

    if ($_SESSION['submitted'] == true){ 
     // do something 
    } 
}); 
  1. eine Funktion erstellen und die Ihre success Funktion am Ende nennen.

Codebeispiel:

function sessionCheck(){ 
    if ($_SESSION['submitted'] == true){ 
     // do something 
    } 
} 

.... 

$.post(ajaxurl, data, function (response) { 
    alert("Account Created"); 

    sessionCheck(); 
}); 
  1. Geben Sie Ihre $(document) ein .ajaxsuccess(function). Dies wird jedes Mal ausgelöst, wenn Sie einen Ajax-Anruf abgeschlossen haben. Beachten Sie, dass mehrere Instanzen diese überschreiben können. In diesem Fall müssen Sie jeder .php-Ausgabe eine identifizierende Sitzungsvariable hinzufügen.

Codebeispiel

$(document).ajaxSuccess(function() { 

    if ($_SESSION['submitted'] == true){ 
     // do something 
     //then find a way to remove $_SESSION['submitted'] 
     //  maybe using AJAX as well. 
    } 

    //else if ($_SESSION['somethingElse'] == true) 
}); 
Verwandte Themen