2010-07-12 8 views
1

Remarque: Ceci concerne un previous question.L'appel jQuery AJAX vers Java/Wicket ne reçoit aucune réponse dans IE (6/7/8)

J'ai une page Wicket qui a une forme avec des interactions côté client complexes que j'ai décidé d'utiliser jQuery à la place de Wicket (longue discussion, je sais). Essentiellement, je ne fais que construire un objet JSON, le soumettre via AJAX, et effectuer une action à la fin. L'appel fonctionne bien dans Firefox, mais pas dans une version d'IE. J'ai déjà vérifié qu'il n'y a pas de virgules étrangères. Voici le code:

var lookup = { 
    'name': name, 
    'description': description, 
    'items': [{ 
     'name': itemName, 
     'value': itemValue 
    }] 
}; 

$.ajax({ 
    type: 'post', 
    url: '${callbackURL}', // This file is parsed by Wicket and receives a dynamic callback URL here. This is not jQuery! 
    cache: false, 
    data: {'lookup': JSON.stringify(lookup)}, 
    contentType: 'application/json', 
    complete: function() { 
     alert('This never gets called in IE!') 
    } 
}); 

Des suggestions? Merci!

Mise à jour: Il semble que mon problème est dû à la mise en cache IE des ressources. J'ai mis du code non-cache dans mon fichier HTML, mais il semble que la page soit toujours mise en cache (et par extension, le JS auquel elle fait référence), ou le fichier JS avec mon code jQuery est mis en cache avec le l'ancienne URL de rappel pour que le serveur ne réponde plus car il n'y a plus rien dans cette URL. Quand je supprime les jolies URL tout fonctionne bien (parce que chaque fois que Wicket génère l'URL, c'est unique). Cependant, la fonction complete ne devrait-elle pas être appelée même s'il n'y a pas de réponse du serveur?

+0

Il serait utile de publier le code en question. Avez-vous déterminé si la requête HTTP se produit réellement? L'avez-vous traversé avec le débogueur IE8? – Pointy

+0

Désolé de ne pas poster le code initialement. Je devais partir au milieu de l'affichage de ma question et je voulais juste l'obtenir là-bas. La requête AJAX est en cours (je persiste à réussir les données de la requête), mais le rappel n'est jamais exécuté. Aucune exception n'est levée (j'ai enveloppé l'appel dans un try/catch et je ne l'ai jamais fait au catch), et j'ai ajouté 'error: function (request, status, err) {...}' au $ Appel .ajax() et vérifié qu'aucune erreur n'y est renvoyée. – Jared

Répondre

0

Cela était dû à la mise en cache IE agressive. Il a été résolu en ajoutant un paramètre généré de façon unique à l'URL afin que le navigateur pense qu'il s'agit d'une nouvelle URL à chaque fois.

0

Pouvez-vous publier le code que vous utilisez pour faire l'appel AJAX, et pouvez-vous préciser comment cela ne fonctionne pas dans IE? La demande AJAX d'appel n'est-elle pas faite dans IE, la demande renvoie-t-elle une erreur, y a-t-il un problème de gestion de la réponse?

Habituellement, cela serait attribué à des virgules étrangères, mais vous les avez déjà exclues, donc je pense que plus d'informations sont nécessaires pour nous aider.

+0

Vous pouvez essayer d'ajouter un paramètre dataFilter à votre appel, pour voir s'il s'agit d'une erreur d'analyse (bien que je m'attendrais à ce que l'erreur traitée soit invoquée) .Vous pouvez également essayer d'ajouter un délai à la requête. que quelque chose empêche IE de recevoir la réponse entière, auquel cas vous obtiendrez une erreur de délai – Zam