Проблема jQuery SESSION с Google Chrome и Safari только на MAC OS x 10.5 - PullRequest
1 голос
/ 03 июня 2011

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

function updateBasket(data) {
if (data != '') {
    $.each(data, function(k, v) {
        if (jQuery.inArray(k, data.remove) == -1 && $('.' + 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 и IE, но по какой-то причине 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": "£120.00",
    "vat_total": "£0.00",
    "total": "£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": "&pound;0.00",
    "vat_total": "&pound;0.00",
    "total": "&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.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 03 июня 2011

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

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

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

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

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


Кроме того, вы говорите, что у вас есть некоторые проблемы с бэкэндом (SESSION). Я не могу помочь вам с этим, но когда я пытаюсь получить ответ, полученный в моем тестовом примере, все работает так, как вы хотели. Удачи.

0 голосов
/ 03 июня 2011

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

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

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

session_start();

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...