J'ai essayé de faire fonctionner ce long script d'interrogation, mais je continue de me coincer. Cette fois, j'ai un problème avec la requête ajax sur le serveur. Le script php qui sert les données (exécution de l'interrogation longue en utilisant une boucle et le sommeil) fonctionne parfaitement bien, mais pas mon script jQuery.jQuery ajax php longue interrogation
Jusqu'ici, j'ai essayé d'utiliser une requête $.ajax()
normale et une requête $.post()
au script, mais quand je le fais, le script entier est bloqué. Eh bien, le script se charge comme il est censé le faire, mais la page montre qu'il continue à charger (en utilisant google chrome, il montre la barre "en attente" en bas de l'écran). Après le délai de 60 secondes dans le script php, le script jQuery reçoit "false" car aucune donnée n'a été trouvée. Le script est alors censé demander l'information agian.
Ma question est: comment puis-je éviter le navigateur montrant qu'il charge quelque chose en arrière-plan? Mon serveur est un serveur partagé, donc je n'ai pas accès quand il s'agit d'installer des choses sur le serveur lui-même, donc cela doit être résolu en utilisant seulement javascript (jQuery) et php.
EDIT: il suffit de vérifier mon script dans Internet Explorer et il ne semble pas montrer aucun signe que le script est chargement mais il est encore un problème dans Google Chrome
EDIT Affichage du code:
Ceci est mon fichier javascript:
if($("#interestboard"))
{
var lasttime = $("#lasttime").val();
var pollurl = $("#pollurl").val();
lpStart();
}
function lpStart()
{
$.ajax({
type: "GET",
url: pollurl+lasttime,
async: true,
cache: false,
success:function(data)
{
alert(data);
},
error: function()
{
alert("Something went wrong");
}
});
}
Bien sûr, cela est enveloppé dans le $(document).ready()
Mon script php est quelque chose comme ce qui suit:
while(time()-$time<60)
{
$this->class = $class["id"];
$this->orderBy("timestamp");
$this->_extraConditions = "`timestamp`>'$lastTime' AND ";
$result = $this->search();
if($result)
return $result;
usleep(250000);
clearstatcache();
}
Lorsque vous utilisez Firebug (avec Google Chrome), il montre seulement qu'une demande a été faite mais ne montrant pas le chargement-icône habituelle à la fin de la chaîne GET dans la console. Dans Firefox, il montre également qu'une requête est en attente (montrant l'icône de chargement) mais au moins le navigateur n'agit pas comme si la page était en train de charger.
Merci ...
Utilisez-vous Firefox et firebug? Cela vous aidera à vous dire ce qui se passe. Pourriez-vous poster du code? – Brad
Juste édité le message d'origine afin qu'il contienne le code source et une brève description du résultat de l'utilisation de Firebug – Simon
J'ai commencé à travailler maintenant. Si je mets un timeout pour invoquer la fonction lpStart() deux secondes après que Google ait chargé Google Chrome ne montrera pas la barre de chargement mais cela présente un nouveau problème. Chaque fois que j'arrête la requête (c'est-à-dire en cliquant sur un lien) l'événement d'erreur est déclenché et je reçois une alerte me disant que "quelque chose s'est mal passé" (comme c'est supposé le faire). Après cela, ce site ne se chargera pas tant que le délai d'attente de la requête n'aura pas été atteint. Cela ne se produit que si je suis dans le même navigateur (même session) - pas quand je reçois l'erreur sur mon ordinateur iPad ... – Simon