Frage

Was ich hierher bekommen habe, ist eine Ajax.Updater -Prototyp -JS -Funktion. Es funktioniert perfekt auf diese Weise:

new Ajax.Updater('feedback', 'contact.php', {
    method: 'post',
    parameters: Form.serialize($('contactForm')),
    onFailure: reportError
});

Aber ich möchte den Prozess ein wenig verzögern. Ich habe auf dem Prototyp IRC -Kanal gefragt, und dies scheint der richtige Weg zu sein:

var feedback = function() {
    new Ajax.Updater('feedback', 'contact.php', {
        method: 'post',
        parameters: Form.serialize($('contactForm')),
        onFailure: reportError
    });

    new Effect.Highlight('feedback', {
        duration: 1
    });
}
feedback.delay(1.5);

(Machen Sie sich nicht um den skriptionalen Effekt)

Es gibt eine Echo -Funktion in contact.php, die so aussieht:

echo("Thanks for your message $_POST['Name']!");

Nach der Anwendung der Verzögerung wird der Name nicht mehr wiedergegeben! Was ist los?

War es hilfreich?

Lösung

Ok, letztes Versuch zu diesem Zeitpunkt. Das funktioniert für mich und tut, was Sie wollen

Meine HTML-Datei

<html>
    <head>
        <title>asd</title>
        <script type="text/javascript" src="src/prototype.js"></script>
        <script type="text/javascript" src="src/scriptaculous.js"></script>
        <script type="text/javascript">
            var feedback = function() {
                var params = Form.serialize($('contactForm'));
                new Ajax.Updater('feedback', 'contact.php', {
                    method: 'post',
                    parameters: params,
                    onFailure: reportError,
                    asynchronous:true
                });

                new Effect.Highlight('feedback', {
                    duration: 1
                });
            }
            function reportError(request) { alert("error");} 

        </script>
    </head>
    <body>
        <form id="contactForm">
            <p>Name:<br><input name="Name" type="text" size="30" maxlength="30"></p>
            <input name="sendbutton" type="button" value="Send" onClick="feedback.delay(1.5);">
        </form>
        <div id="feedback">foo</div>
    </body>
</html>

Mein contact.php

<?php
echo("Thanks for your message ".$_POST['Name']."!");
?>

und verwenden die JS -Dateien von hier

Andere Tipps

Warum wickelst du nicht einfach das Ding in a ein? setTimeout Anruf. Dadurch Verzögerung der AJAX -Anforderung, anstatt die Anzeige zu verzögern. Das ist übrigens exzell

Aber

new Ajax.Updater.delay(2, 'feedback', 'contact.php', {
    method: 'post',
    parameters: Form.serialize($('contactForm')),
    onFailure: reportError
});

sollte auch funktionieren

Ich versuche es noch einmal.

Veränderung

echo("Thanks for your message $_POST['Name']!");

zu

echo("Thanks for your message ".$_POST['Name']."!");

und versuche es noch mal.

Und stellen Sie sicher, dass Sie die implementiert haben reportError Funktion, die Sie hier weitergeben

onFailure: reportError

z.B

function reportError(request){alert('Shit happens!');}

Dies gilt nicht für die ursprüngliche Frage - aber da ich in meiner Suche auf diesen Thread gestoßen bin. Ich dachte, ich würde meine Ergebnisse veröffentlichen.

Ich hatte einen Code, einen Ajax -Updater hören plötzlich auf zu arbeiten:

new Ajax.Updater('my_id, 'http://mydomain.com/my_script.php');

Der Grund, warum es für mich nicht funktioniert hat, weil ich auf www.mydomain.com war (gegen Mydomain.com)

Ich habe es einfach geändert in:

new Ajax.Updater('my_id, 'my_script.php');

Und es hat gut funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top