Pregunta

Lo que obtuve aquí es una función JS de prototipo AJAX.UPDATER. Está funcionando perfectamente de esta manera:

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

Pero quiero retrasar un poco el proceso. Pregunté por el canal IRC prototipo y este parece el camino a seguir:

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

(No te importe el efecto guionista)

Hay una función de eco en contacto.php que se ve así:

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

¡Después de aplicar el retraso, el nombre ya no se hace eco! ¿Qué ocurre?

¿Fue útil?

Solución

Ok, intente este último. Esto funciona para mí y hace lo que quieres

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

Mi contacto.php

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

y usando los archivos JS de aquí

Otros consejos

¿Por qué no solo envuelves la cosa en un settimeut llamar. Retrasando así la solicitud AJAX en lugar de retrasar la visualización. Que es por cierto, excitante lo que hace la función de retraso del prototipo

Pero

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

también debería funcionar

Le doy otro intento.

Cambio

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

a

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

e intenta de nuevo.

Y asegúrese de haber implementado el reportError función que transmite aquí

onFailure: reportError

p.ej

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

Esto no se aplica a la pregunta original realizada, pero desde que me encontré con este hilo en mi búsqueda. Pensé que publicaría mis resultados.

Tenía algún código un actualizador de Ajax de repente dejar de funcionar:

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

La razón por la que no funcionó para mí porque estaba en www.mydomain.com (opuesto a mydomain.com)

Simplemente lo cambié a:

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

Y funcionó bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top