Je ne connais pas la terminologie correcte pour rechercher la solution. Veuillez suggérer une stratégie pour diviser la sortie de php en petits morceaux et les passer pas à pas à responseText d'ajax.stratégie pour diviser la sortie php en plus petites sorties (ajax, php) (ajax appels imbriqués, ajax dans ajax?)
Le projet est une page Web ajax qui prend une chaîne de texte (nom de famille) et la transmet à un programme PHP. Le code php prend le nom de famille et récupère aléatoirement 3 personnes avec des prénoms différents, et les met dans un tableau. Une fois cela fait, le code php contactera les serveurs externes pour récupérer les informations associées à chaque nom, et affichera les informations dans un div de la page Web. Le processus d'obtention de données à partir des serveurs externes est très lent.
Ce code est essentiellement fait, mais l'ensemble du processus prend beaucoup de temps pour générer la sortie sur l'écran. Existe-t-il un moyen (une stratégie) de produire immédiatement chaque étape du code php au lieu de devoir attendre le code complet?
Mon pseudo code php est comme ceci:
<?
get 3 names; //output this immediately
foreach name { get phone number }
?>
Sinon, je pourrais obtenir un nom et le téléphone #, et la sortie immédiatement avant de passer au nom suivant.
Existe-t-il des codes/fonctions/stratégies php ou ajax permettant d'atteindre cet objectif? Veuillez suggérer des solutions ou rechercher des mots-clés.
Addition/Edit:
Merci pour les suggestions. Est-il possible d'exécuter un autre appel ajax après l'appel ajax parent? J'ai d'abord suivi cette route, mais mes tests de l'appel js/ajax imbriqué n'ont pas fonctionné. Cela peut être dû à des erreurs de syntaxe, veuillez regarder par-dessus le code.
Le code de test dans le testajax.php (ou testajax.html) fichier pour le xhr.responseText d'appel ajax est
<div id="name" >JAM <div id="numa" >
<br />
<br />text holder >>
<script type="text/javascript">
var pid=document.getElementById("numa").parentNode.id;
alert (pid);
document.getElementById('numa').innerHTML += 'append text>> ';
document.write(' docwrite');
</script>
</div>
</div>
<br />
<br />ending text
Si je considère le fichier testajax.php (ou testajax.html) directement, Je verrais
JAM
text holder >> (an alert window) append text>> docwrite
ending text
mais si je fais un appel ajax du fichier testajax.php, tout ce que je voyais est
JAM
text holder >>
ending text
Le code à l'intérieur des balises <script> </script>
ne s'exécute pas après l'appel ajax
Quelqu'un peut-il expliquer cela, et offrir une solution?
TIA
Après la recherche, j'ai découvert que pour que cela fonctionne, le xhr.responseText doit contenir uniquement du code js (). Ensuite, il doit être eval (ie eval (xhr.responseText);). Mon xhr.responsetext était un mélange de code html et js, donc eval ne fonctionnerait pas. En outre, eval dans un appel ajax ne fonctionne pas dans les navigateurs IE6 (et 7/8?). Voici 2 liens pour expliquer ce http://www.webdeveloper.com/forum/archive/index.php/t-177998.html et http://www.webdeveloper.com/forum/archive/index.php/ t-110448.html – jamex