Prototype Ajax.Updater non funziona correttamente con ritardo
-
13-09-2019 - |
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?
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.