2010-12-07 9 views
1

Je travaille sur une application qui fait des appels ajax et j'ai rencontré un comportement assez particulier parfois quand un appel ajax est déclenché il se duplique et le second se termine mais je ne reçois pas la réponse en arrière et l'original continue à charger pour toujours ceci est fixé quand un appel d'ajax est renvoyé ou quand je frappe l'actualisation.jquery réponse d'appel ajax ne retourne jamais

Le problème est que je ne peux pas reproduire ce comportement car il se produit de manière aléatoire. La plupart du temps quand l'onglet reste ouvert et que je suis sur un autre onglet ou programme.

La seule chose que j'ai remarqué en utilisant firebug est qu'il semble y avoir quelque chose de mal avec les en-têtes de réponse.

Par rapport à un appel réussi, ils sont dans un ordre différent et certaines informations manquent complètement. Le Content-Type a toujours plus de types que text/html que je définis dans mon $.ajaxSetup.

$.ajaxSetup({ 
    dataType:'html', 
    cache:false, 
    type:'POST', 
    timeout:15000, 
    error:function() { 
    alert('Action aborted please try again'); 
    }, 
    complete:function(XMLHttpRequest,textStatus){ 
    //console.log('XMLHttpRequest.readyState : '+XMLHttpRequest.readyState+'\nXMLHttpRequest.statusText : '+XMLHttpRequest.statusText+'\nXMLHttpRequest.status : '+XMLHttpRequest.status+'\ntextStatus : '+textStatus); 
    } 
}); 

et un exemple de mes appels ajax:

var dataString = 'value='+value+'&value1='+value1+'&value2='+value2; 
    $.ajax({ 
    url:'file.php', 
    data:dataString, 
    success:function(resp){ 
     alert(resp); 

    } 
    }) 

ce comportement se passait beaucoup plus souvent avant ajouté un dataType et aussi il se passe plus souvent vus localement sur une machine winXP SP3 en utilisant xampp et je pense à la fois firefox et IE.

J'ai testé dans un serveur exécutant Windows Server 2008 et Apache et php standalones pas xampp qui est et se passe encore moins. Formulaire mon PC à la maison il ne se passe presque jamais le test ci-dessus était dans mon bureau pc.

Est-ce que quelqu'un a rencontré un comportement similaire ou peut-être y at-il un moyen de coder différemment mes appels ajax? Je voudrais éviter d'utiliser un plugin et un long sondage semble être un peu lourd sur le serveur Apache.

Répondre

0

La façon dont vous utilisez l'appel jquery ajax est techniquement correcte. Une suggestion que je ferais est de ne pas construire la chaîne de données manuellement comme vous avez. Vous pouvez passer un littéral d'objet au paramètre data et laisser jquery faire la conversion de chaîne pour vous. Cela a l'avantage supplémentaire de permettre à jquery d'effectuer des échappements appropriés qui peuvent parfois déranger un XMLHttpRequest A part cela, je recommanderais d'utiliser la commande console.trace() de firebug pour voir si vous êtes en train de faire deux appels .ajax et pourquoi. Il y a un écouteur 'beforeSend' que vous pouvez définir dans votre ajaxSetup - peut-être un bon endroit pour le mettre.

0

Vous voulez dire quelque chose comme ceci:

var dataString= { 
    value: value, 
    value1: value1 
}; 

Je suis presque sûr que certainement seulement un feu d'appel à la fois mais si elle prend trop de temps, il se reproduit et continue le chargement pour toujours.

Je joins une capture d'écran de Firebug:

Firebug

+0

c'est comme la demande initiale ne se termine jamais, mais plutôt im obtenir une réponse qui n'a jamais été réellement demandé – alex

Questions connexes