2010-05-19 2 views
1

Je rencontre un problème avec deux appels jQuery. Le premier est un "load" qui récupère du HTML et l'affiche sur la page (il inclut du Javascript et du CSS dans le code retourné). Le second est un "getJSON" qui retourne JSON - le JSON retourné est valide. Tout fonctionne correctement dans tous les autres navigateurs que j'ai essayés - à l'exception de Chrome pour Windows ou Mac. La page en question est ici:Problèmes avec jQuery load et getJSON uniquement lors de l'utilisation de Chrome

http://urbanistguide.com/category/Contemporary.aspx

Lorsque vous cliquez sur un nom de restaurant dans IE/FF, vous devriez voir cet article élargir avec plus d'informations - et une carte affichée à droite. Toutefois, si vous effectuez cette opération dans Chrome, les données JSON sont imprimées à l'écran.

Le premier spot problème est lorsque la fonction « charge » est appelée ici:

var fulllisting = top.find(".listingfull"); 
    fulllisting.load(href2, function() { 
     fulllisting.append("<div style=\"width:99%;margin-top:10px;text-align:right;\"><a href=\"#\" class=\"" + obj.attr("id") + "\">X</a>"); 
     itemId = fulllisting.find("a.listinglink").attr("id"); 

... 

Dans le code ci-dessus, la fonction de rappel ne semble pas s'invoqué.

La deuxième place de problème est lorsque la fonction « getJSON » est appelée:

$.getJSON(href, function(data) { 
    if (data.error.length > 0) { 
     //display error message 
    } 
    else { 
     ... 
    } 

Dans ce cas - il semble juste de suivre le lien au lieu d'effectuer le rappel ... et oui, je fais un "retour faux" à la fin de tout cela pour empêcher l'exécution du lien.

Tout le reste du code est en ligne sur cette page si vous voulez afficher le code source.

Des idées?

Merci

+1

Pas vraiment une réponse à votre question, mais si vous ne l'avez pas déjà fait, cela peut valoir la peine d'essayer dans Safari car c'est aussi un Navigateur basé sur Webkit. De cette façon, vous saurez au moins s'il s'agit d'un comportement Webkit ou d'une particularité de Chrome, ce qui peut vous aider dans la recherche d'une solution. – pdbartlett

+0

Vous avez raison - j'aurais dû mentionner cela ci-dessus. Cela fonctionne très bien dans Safari ... jusqu'à présent, la seule fois où j'ai un problème c'est quand j'utilise Chrome. – leftend

Répondre

0

En loadBusiness(obj, doScrollTo) redeclare top = obj.parent().parent().parent() en tant que var top = obj.parent().parent().parent().

La façon dont vous l'avez maintenant fait référence à la variable globale top comme dans la fenêtre. Étant donné qu'il s'agit d'une variable spéciale, Chrome ne vous permet pas de la redéfinir. Lorsque vous exécutez var fulllisting = top.find(".listingfull"), vous exécutez essentiellement var fulllisting = window.find(".listingfull") (vérifiez https://developer.mozilla.org/en/DOM/window.find). Cette méthode renvoie false, puis une exception est lancée ici: fulllisting.load(...) car elle est la même que false.load(...)

+0

Cela a fait l'affaire, désolé, il a fallu si longtemps pour marquer une réponse. – leftend

0

Chrome est trop stricte et ne reconnaît pas l'objet malformé JSON, pas comme les autres navigateurs.

i.e. {"list":["abc","def",]} 

vous devez changer à

{"list":["abc","def"]} 

ou

{"list":["abc","def",""]} 

et bien sûr omettent le dernier.

+0

Merci pour la réponse, et vraiment désolé pour ma réponse tardive - mais je ne vois pas où mon JSON est mal formé. Voici un exemple du site: – leftend

+0

Ici: {"error": "", "title": "ALCHEMY", "addressShort": "1503 30e St", "adresse": "1503 30e St, San Diego, CA, 92102 "," isFeatured ": vrai," imagePath ":"/pix/listing/128871917553593750_Alchemy.jpg "," téléphone ":" 619.255.0616 "," heuresOfOperation ":" "," openSince ":" Feb 2009 ", "websiteUrl": "/ LinkGo.aspx? n = 318", "shortSummary": "Buzzworthy, restaurant décontracté avec un menu varié, des cocktails créatifs (bacon bloody mary!), et une carte des vins attrayante." } – leftend

+0

vous pouvez vérifier la validité des données JSON dans ce site http://www.jsonlint.com/ mais vos données JSON semblent bonnes dans ce cas. –