2009-01-27 10 views
0

J'ai trouvé un problème avec l'utilisation de JQuery timeout, j'ai une page avec script, il est mis un délai d'attente et une réponse d'attente du serveur. Le problème est quand le délai d'attente doit effectuer, en quelques mots, il "aucune action". Je pense que ce script n'interrompe pas la connexion avec le serveur et attend la réponse du serveur, car du côté serveur, la connexion est activée pendant 10 secondes (mais le délai d'attente est défini sur 5 secondes). Je vois ce problème lorsque le serveur fonctionne dans un nom de domaine différent puis client, alors que lorsque le serveur et le client travaillent en local ce problème ne l'est pas.Problème JQuery avec timeout

Avez-vous une idée parce que cette erreur s'est produite ou comment fermer la connexion de script?

// client 

$.ajax({ 

    type: "GET", 

    url: "some.php", 

    data: "name=John&location=Boston", 

    timeout: 5000, 

    success: function(msg){ 

     alert("Data Saved: " + msg); 

    }, 
    error: function(request, errorType, errorThrown){ 

     alert("opppsssss .... "); 
    } 
}); 

et le code du serveur:

//some.php 

< ? 

//simulate long task 

sleep(10); //sleep 10 seconds 

//send response 

echo "some test data"; 

? > 

Cordialement

Domenico

Répondre

3

Vous le faites retour à l'avant par les regards de celui-ci. Vous avez défini le délai d'attente sur 5 000 millisecondes (5 secondes). Si le code côté serveur prend plus de temps à répondre que 5 secondes, il expirera. Tu fais le sommeil (10); qui dort pendant 10 secondes, ce qui est deux fois plus long que le délai spécifié. La façon de résoudre ce problème serait de faire ce qui suit:

// client 
$.ajax({ 
    type: "GET", 
    url: "some.php", 
    data: "name=John&location=Boston", 
    timeout: 10000, 

    success: function(msg){ 
     alert("Data Saved: " + msg); 
    }, 
    error: function(request, errorType, errorThrown){ 
     alert("opppsssss .... "); 
    } 
}); 

Et le code du serveur:

//some.php 
< ? 
    //simulate long task 
    sleep(5); // sleep 5 seconds! 
    //send response 
    echo "some test data"; 
? > 

Espérons que cela aide.

+0

La réponse ici me laisse perplexe et ne répond pas du tout à ma question. Ne devrait-il pas être l'inverse (comme le poste de l'OP)? Le point est que le côté client expirera et fera quelque chose, et afin de simuler le comportement de temporisation, le serveur doit dormir plus longtemps que le délai d'expiration réel du côté client. – Antony

+0

Non. Lorsque la requête est envoyée au serveur, le serveur dort pendant _10 secondes_. Le client expirera dans _5 secondes_ (5000 millisecondes). Le fait est qu'il veut que la requête attende avant que le serveur n'effectue une action, mais dans ce cas la requête sera simplement rejetée car le serveur n'a pas répondu en temps voulu, ce qui signifie que rien ne se passera du tout. Crikey, ce post a plus de trois ans aussi! Réveiller les morts? ;) – Kezzer