Проблемы с загрузкой jQuery и getJSON только при использовании Chrome - PullRequest
1 голос
/ 19 мая 2010

У меня проблема с двумя вызовами jQuery. Первая - это «загрузка», которая извлекает HTML и отображает его на странице (он включает в себя некоторый Javascript и CSS в возвращаемом коде). Второе - это getJSON, который возвращает JSON - возвращенный JSON действителен.

Все отлично работает во всех других браузерах, которые я пробовал - кроме Chrome для Windows или Mac. Страница, о которой идет речь, находится здесь:

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

Когда вы щелкаете по названию ресторана в IE / FF, вы должны увидеть, что этот элемент расширяется с дополнительной информацией - и карта отображается справа. Однако, если вы сделаете это в Chrome, все, что вы получите - это данные JSON, напечатанные на экране.

Первое проблемное место, когда здесь вызывается функция «load»:

    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");

...

В приведенном выше коде функция обратного вызова, похоже, не вызывается.

Вторая проблема - это когда вызывается функция getJSON:

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

В этом случае - просто кажется, что вы переходите по ссылке, а не выполняете обратный вызов ... и да, я делаю "return false"; в конце всего этого, чтобы предотвратить выполнение ссылки.

Весь остальной код встроен на этой странице, если вы хотите просмотреть исходный код.

Есть идеи ??

Спасибо

Ответы [ 2 ]

0 голосов
/ 08 августа 2010

In loadBusiness(obj, doScrollTo) redeclare top = obj.parent().parent().parent() as var top = obj.parent().parent().parent().

То, как вы сейчас это делаете, относится к глобальной переменной top, как в окне. Поскольку это специальная переменная, Chrome не позволяет переопределить ее. Когда вы запускаете var fulllisting = top.find(".listingfull"), вы по существу запускаете var fulllisting = window.find(".listingfull") (проверьте https://developer.mozilla.org/en/DOM/window.find). Этот метод возвращает false, а затем здесь выдается исключение: fulllisting.load(...), потому что оно совпадает с false.load(...)

0 голосов
/ 08 августа 2010

Chrome слишком строг и не распознает искаженный объект JSON, как и другие браузеры.

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

Вы должны изменить его на

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

или

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

и, конечно, пропустить последний.

...