2009-09-08 7 views
0

J'utilise flickr api pour créer une galerie simple basée sur des images tirées par leur tag.

La galerie fonctionne correctement dans tous les navigateurs sauf IE6. Lorsque vous naviguez vers la page (en cliquant sur un lien) dans ie6, le code de réussite/erreur $ .ajax bloque le refus, mais lorsque la page est rechargée ou directement (en entrant une URL), il n'y a aucun problème.

$.ajax({ 
type: "GET", 
    url: "http://api.flickr.com/services/rest/?&method=flickr.photos.search&api_key=" + api_key + "&user_id=" + user_id + "&tags=" + tags + "&format=json&jsoncallback=?", 
    cache: false, 
    dataType: "jsonp", 
    contentType: "application/json; charset=utf-8", 
    success: function(data) { 
     alert('good'); 
    }, 
    timeout: 2000, 
    error: function(XMLHttpRequest, textStatus, errorThrown) { 
     alert(textStatus); 
    } 
}); 

Le code ci-dessus est évidemment une version simplifiée du javascript actuel, mais le bogue est toujours présent.

Toute aide serait grandement appréciée. Cela semble être un bug très étrange. Peut-être que c'est un problème de mise en cache?

Répondre

1

Ce problème est assez récurrent. IE met en cache les appels AJAX. Vous devez ajouter un nombre aléatoire ou une chaîne à votre appel à chaque fois afin qu'il n'exécute pas un appel mis en cache. Oui, c'est dans l'événement $ (document) .ready().

url: "http://[your url]&rand=" + Math.Random(), 
0

Deux pensées:

  1. est votre appel dans un bloc $(document).ready()?
  2. Essayez de se débarrasser de l'esperluette droite au début de la chaîne de requête :

    /?method=flickr.photos.search & ...

+0

Bon endroit avec le querystring, mais ce n'est pas non plus. – BBB

0

Comment est le « lien "déclencher la charge AJAX?

  • en ligne onclick = "faireQuelque chose();"
  • inline href = "javascript: faireQuelque chose();"
  • via jQuery $ ('# somelink'). Bind ('click', doSomething);
  • autre chose?

Je demande parce que IE6 has a known bug où si vous avez/utiliser le javascript : protocole sur un lien ... puis utilisez JavaScript pour charger une page différente, il demande la page, mais jamais le rendu. Je me demande si (en fonction de la façon dont votre AJAX est attaché) si le bug ci-dessus s'étend aux requêtes AJAX et pas seulement aux requêtes location.href.

+0

Peut-être que je ne me suis pas clairement expliqué dans le message original. Le javascript se déclenche sur DOM prêt, la seule façon dont un lien est impliqué est quand il est utilisé pour naviguer vers la page. Le code inclus est enveloppé dans une fonction et est appelé dans $ jquery $ (document) .ready (function() {}); – BBB

0

Quatre choses liées à votre code, mais pas à votre question:

    délai
  • ne sont pas pris en compte par .ajax $ lorsqu'ils traitent avec jsonp
  • ni est contentType
  • le rappel d'erreur est jamais appelé dans le contexte d'une requête jsonp
  • Vous devriez vraiment utiliser le paramètre data (le code serait beaucoup plus propre qu'avec l'URL personnalisée qui le construit pour l'instant)

Point 1 & 3 sont dues à des limitations dans la façon dont $ .ajax est implémenté. Je recommande http://code.google.com/p/jquery-jsonp/ si vous avez vraiment besoin de ces fonctionnalités. Maintenant, en dehors de ce que karim79 a signalé, je ne vois rien de mal avec votre code.Donc, je suppose que vous avez quelque chose d'autre qui va mal avant dans la fonction que vous alimentez à $ (document) .ready(). IE est beaucoup moins indulgent que les autres navigateurs quand il s'agit de la syntaxe javascript. Essayez de mettre l'appel $ .ajax le plus tôt possible.

aussi:

  • -t-il dans IE7?
  • Quelle version de jQuery utilisez-vous?