Domanda

Quello che ho ottenuto qui è la funzione di un prototipo Ajax.Updater js. E 'perfettamente funzionante in questo modo:

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

Ma voglio ritardare il processo un po '. Ho chiesto in giro sul canale IRC prototipo e questo sembra la strada da percorrere:

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);

(don t mente l'effetto Scriptaculous)

C'è una funzione di eco in contact.php che assomiglia a questo:

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

Dopo aver applicato il ritardo il nome non è più eco! Che cosa c'è che non va?

È stato utile?

Soluzione

Ok ultimo tentativo su questo. Questo funziona per me e fa ciò che vuoi

Il mio file HTML

<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>

Il mio contact.php

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

e utilizzando i file js da qui

Altri suggerimenti

Perché non basta avvolgere la cosa in un setTimeOut chiamata. Così ritardando la richiesta Ajax invece di ritardare la visualizzazione. Che è btw excatly quello che il prototipo di funzione di ritardo fa

Ma

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

dovrebbe funzionare anche

Io do un altro tentativo.

Cambia

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

a

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

e riprovare.

E assicurarsi di aver implementato la funzione reportError si passa qui

onFailure: reportError

per es.

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

Questo non si applica alla domanda iniziale chiesto - ma da quando mi sono imbattuto in questa discussione nella mia ricerca. Ho pensato di postare i miei risultati.

Ho avuto qualche codice di un programma di aggiornamento ajax improvvisamente smettono di funzionare:

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

Il motivo non ha funzionato per me, perché ero in www.mydomain.com (al contrario di mydomain.com)

Ho semplicemente cambiato in:

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

e ha funzionato bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top