Проблема сеанса jQuery в Google Chrome и Safari только в MAC OS x 10.5

#google-chrome #jquery #safari

#google-chrome #jquery #safari

Вопрос:

У меня проблема со следующим кодом, который не хочет работать в Chrome и Safari:

 function updateBasket(data) {
if (data != '') {
    $.each(data, function(k, v) {
        if (jQuery.inArray(k, data.remove) == -1 amp;amp; $('.'   k).length > 0) {
            $('.'   k).html(v);
        }
    });
}
}

$('.add_to_basket').live('click', function() {
    var button = $(this);
    var classes = $(this).attr("class");
    var identity = $(this).attr("rel").split('_');
    var url = '/basket/action/add/type/'   identity[0]   '/id/'   identity[1];
    $.ajax({
        type: 'POST',
        url: url, 
        data: ({ cls : classes }),
        dataType: 'json',
        success: function(data) {
            if (!data.error) {
                updateBasket(data);
                button.replaceWith(data.button);
            }   
        }       
    });
    return false;
});
  

Триггер .add_to_basket срабатывает только при первом нажатии — после этого он ничего не делает.
Это отлично работает с Firefox и IEs, но по какой-то причине Chrome и Safari, похоже, это не нравится.

Вот ответ json, который приходит после первого нажатия:

 {
    "error": false,
    "items": {
        "27": {
            "price": "120.00",
            "qty": 1,
            "discount": 0,
            "vat": 0,
            "price_vat": 120
        }
    },
    "bundles": [],
    "no_of_items": 1,
    "sub_total": "amp;pound;120.00",
    "vat_total": "amp;pound;0.00",
    "total": "amp;pound;120.00",
    "remove": ["remove", "error", "button", "items", "basket"],
    "button": "<a href="#" class="button button_red add_to_basket" rel="item_27">Remove from the basket</a>"
}
  

и тот, который следует за вторым (возврат в исходное состояние):

 {
    "error": false,
    "items": [],
    "bundles": [],
    "no_of_items": 0,
    "sub_total": "amp;pound;0.00",
    "vat_total": "amp;pound;0.00",
    "total": "amp;pound;0.00",
    "remove": ["remove", "error", "button", "items", "basket"],
    "button": "<a href="#" class="button button_blue add_to_basket" rel="item_27">Add to the basket</a>"
}
  

Есть идеи, что я здесь делаю не так?

Чтобы сделать это еще сложнее — это происходит только с Chrome и Safari в Mac OSX 10.5 (Leopard) — но не в Snow Leopard — используя те же версии браузеров (Chrome 11.0.696.71)

Просто обновление — я провел несколько тестов, и, похоже, это проблема с СЕАНСАМИ. Это также не позволяет мне войти в систему — это означает, что сеанс не создается при использовании Chrome или Safari в Mac OS X 10.5.

Есть идеи?

Комментарии:

1. Какой URL отправляется в каждом случае? Можете ли вы использовать отладчик для просмотра всего запроса и ответа?

2. Каждый раз один и тот же URL-адрес — просто параметры в URL могут отличаться. Окно информации об отладке пустое.

3. Это пахнет неправильной отправкой чего-либо или проблемой с серверной частью. Очевидно, что вы получаете ответ. Итак, серверная часть делает что-то не так? Если вы скопируете / вставите URL из неудачного обращения в свою строку URL, получите ли вы то же самое обратно?

4. Я получаю точно такой же распечатанный массив json. Я думаю, что проблема может быть в индексе ‘button’, который отправляет элемент в формате html. Есть ли какие-либо известные проблемы с отправкой html обратно в виде json?

5. Извините — просто для пояснения — эти ответы получены при использовании Firefox, а не рассматриваемых браузеров.

Ответ №1:

Я создал простой тестовый набор в jsfiddle. Я не уверен, почему ваш пример работает в другом браузере, но он не должен, если вы не пропустили некоторый код из вопроса.

Вот рабочий пример, который работает в Chrome. http://jsfiddle.net/ZtTeg/2 /

Чтобы заставить это работать, мне пришлось добавить parse возвращенную html-кнопку в элемент jquery (кажется, что только тогда добавляется обработчик кликов)

     var replacement = $(data.button)
    button.replaceWith(replacement)
  

Тестировал это в Firefox и Chrome, и здесь это работает.
Надеюсь, это поможет.


Кроме того, вы говорите, что у вас возникли некоторые проблемы с серверной частью (СЕССИЕЙ). Я не могу вам с этим помочь, но при макете / эмуляции ответа, полученного в моем тестовом примере, все, кажется, работает так, как вы хотели. Удачи.

Комментарии:

1. Однако, похоже, что проблема действительно связана с сеансами, поскольку он не создает сеанс на сервере после нажатия кнопки. Я также пробовал форму входа — и я тоже не могу войти в систему — действительно странно — это первый раз, когда я сталкиваюсь с чем-то подобным.

Ответ №2:

Хорошо — я выяснил, что вызывало проблемы:

 if (!isset($_SESSION)) {
     session_start();
}
  

которое должно быть просто:

 session_start();
  

поскольку он самостоятельно проверяет, установлен ли сеанс.

Спасибо всем за участие!