2010-08-13 6 views
0

je la situation suivante:obtenir des résultats de script php via la fonction charge jquery() avant script php se termine

jquery:

$(function(){ 
     $('input[type="button"]').click(function(){ 
     $('#result').load('script.php'); 
     }); 
}); 

script.php:

<?php 
    echo "1"; 
    sleep(2); 
    echo "2"; 
    sleep(2); 
    echo "3"; 
?> 

Actuellement, la fonction de chargement jquery attendra la fin du script php, puis affichera le résultat dans le t argeted div ... donc dans ce cas il faudra attendre 4 secondes puis afficher 123.

Ce que j'essaye de réaliser est d'avoir la fonction de chargement de jquery pour retourner les résultats séparément, en direct, avant que le script php finisse . Par séparé, je veux voir dans le div 1 ciblé, puis attendre 2 secondes, puis voir 2, puis un autre 2 secondes, puis 3.

Est-ce possible avec mon exemple?

+0

Je pense que vous avez besoin de demandes distinctes. – tcooc

Répondre

1

mauvaise idée de temporiser sur le côté serveur, vous devez le faire sur le client avec la fonction setTimeout (s): obtenir une réponse instantanée à partir du serveur, et l'utiliser comme bon vous semble sur le client:

$.get('script.php', function(data){ 
    $('#div1').yourcode(); 
    setTimeout(function(){ 
     $('#div2').yourcode(); 
    }, 2000); 
}); 
+0

Merci pour les réponses rapides et rapides. Le point de ma question ne concerne pas le timeout ou le sommeil, j'ai utilisé le sommeil dans l'exemple juste pour mieux voir ce que j'essaie d'atteindre. Laissez-moi essayer de reformuler la question (désolé si je ne me suis pas exprimé correctement mais l'anglais n'est pas ma langue maternelle) Donc, mon point est: est-il possible de récupérer des informations à partir d'un script php via jquery load script PHP termine réellement? Par exemple si vous avez plusieurs échos en php, pour récupérer chaque écho séparément dans la même div – Alex

0

Je ne pense pas que vous seriez capable de le faire avec jquery car, pour autant que je sache, toutes les fonctions de callback/handler que vous passez ne seront pas terminées après que le XMLHttpRequest soit fini (ou atteint l'état prêt 4 signifiant request done). Vous pourriez utiliser flush() en php pour envoyer la sortie après un écho, puis utiliser votre propre objet/script ajax XMLHttpRequest et rechercher un autre état prêt tel que 3 qui devrait contenir des données de requête partielles. C'est un PITA à faire, mais surtout à cause des incohérences du navigateur avec des états prêts et je n'ai pas vu une bibliothèque pré-faite qui peut le faire, donc vous auriez probablement à écrire quelque chose vous-même.

Some info about using ready states

1

Non Hors de la boîte, ce ne sera pas possible avec jQuery.load(). Les deux réponses précédentes sont justes - vous devrez soit retravailler XMLHttpRequest ce qui serait un projet horriblement complexe, ou vous devrez interroger votre serveur en utilisant Javascript (setTimeout) et obtenir des valeurs discrètes du serveur à afficher sur le côté client. Sans en savoir plus sur exactement ce que vous essayez de faire, je suggère d'utiliser la dernière approche (sondage) comme suggéré par Darma.