Je suis en train de supprimer une question précédemment posée et de demander à nouveau plus succinctement maintenant que j'ai un peu plus de compréhension du problème.AJAX: comment contourner le problème d'avoir besoin de requêtes synchrones?
J'ai une page qui utilise beaucoup d'AJAX et qui est mise à jour et remplie dynamiquement avec du contenu (éléments de formulaire et div avec du texte renvoyé par un autre élément de formulaire). J'ai vraiment besoin de pouvoir forcer les utilisateurs à attendre que les requêtes AJAX soient traitées (par exemple après avoir rempli un champ de texte qui a soumis certaines valeurs) avant de continuer. De ce que je comprends en utilisant des requêtes synchrones peut causer des problèmes avec le navigateur suspendu etc ...
J'ai également besoin d'une fonction javascript qui exécute plusieurs appels de fonction AJAX mais j'ai aussi besoin d'eux pour exécuter un à la fois. Actuellement, l'utilisation d'appels asynchrones produit des résultats imprévisibles ... peut-être que je vais à ce sujet dans le mauvais sens. Il y a beaucoup de code donc il est difficile de donner un petit exemple, mais je vais essayer ci-dessous:
Le dessous (qui est lui-même inséré par une fonction Ajax) ajoute dynamiquement plus d'éléments de forme à la page si C'est la première fois que l'entrée a été éditée (la première fois que le contenu est écrit dans la base de données ... il suffit de mettre à jour l'entrée db existante et je n'ai pas besoin d'ajouter les éléments de formulaire)
<form name='talkItemForm' id='talkItemFrom-<?php print $_POST[talkItemID]; ?>' class='talkItemForm' method='post'>
<input type='hidden' id='talkItemID' name='talkItemID' value='<?php print $_POST[talkItemID]; ?>'><input type='hidden' id='talkID' name='talkID' value='<?php print $_POST[talkID]; ?>'>
<input type='text' name='talkItemInput' id='talkItemInput' value='New Topic...' onblur=" updateTalkItem(this.parentNode, '<?php print $_POST[talkID]; ?>', '<?php print $_POST[talkItemID]; ?>'); isNewTalkItem('<?php print $_POST[talkID]; ?>', '<?php print $_POST[talkItemID]; ?>', '<?php print generateTalkItemID()+1; ?>','<?php print generateNoteID(); ?>'); "/>
</form>
Invoque:
function isNewTalkItem (talkID, talkItemID, newTalkItemID, newNoteID){
var url = "./wp-content/themes/twentyten/addBelowIfNew.php";
var poststr = "talkItemID=" + talkItemID;
http_request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
// set type accordingly to anticipated content type
//http_request.overrideMimeType('text/xml');
http_request.overrideMimeType('text/html');
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
alert('Cannot create XMLHTTP instance');
return false;
}
http_request.onreadystatechange = function(){
if (http_request.readyState == 4) {
if (http_request.status == 200 || http_request.status == 0) {
result = http_request.responseText;
//following code will note execute if this is not the first time this field has been edited...
if (result) {
// call to AJAX function that inserts a new <form>
newNote(newNoteID, talkItemID);
// another call to AJAX function that inserts a new <form>
newTalkItem(talkItemID, talkID);
}
} else {
alert('There was a problem with the request.');
}
}
}
http_request.open('POST', url, true);
http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http_request.setRequestHeader("Content-length", poststr.length);
http_request.setRequestHeader("Connection", "close");
http_request.send(poststr);
ahhh ... c'est génial. je vais essayer. Merci. Je connais un peu le sujet de jquery, donc je vais mettre en place un ajax avec ça aussi. Je suis juste coincé dans le développement d'une application web comme un projet de compagnie. Stack Overflow est une ressource incroyable. Je ferai de mon mieux pour contribuer (sur des choses que je connais un peu :) merci les gars. J'avais besoin d'un peu de conseil/perspective ici aussi. ma tête est tellement pleine de fonctions php et javascript et de variables et de requêtes et de réponses et de tables de base de données que je ne pouvais pas voir le bois pour les arbres. Merci encore. ... bien que je puisse encore être de retour :) –