仅在MAC OS x 10.5上使用Google Chrome和Safari的jQuery SESSION问题

时间:2011-06-02 20:52:31

标签: google-chrome jquery safari

我遇到以下代码的问题,但不想在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>"
}

知道我在这里做错了吗?

要让它变得更加困难 - 这只适用于Mac OSX 10.5(Leopard)上的Chrome和Safari - 但不适用于Snow Leopard - 使用相同版本的浏览器(Chrome 11.0.696.71)

只是一个更新 - 我已经完成了一些测试,这似乎是SESSIONS的一个问题。它也不允许我登录 - 这意味着在Mac OS X 10.5上使用Chrome或Safari时不会创建会话。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我在jsfiddle创建了一个简单的测试用例。我不确定为什么你的例子在其他浏览器中有效,但除非你从问题中省略了一些代码,否则不应该这样做。

这是一个在chrome中工作的工作示例。 http://jsfiddle.net/ZtTeg/2/

为了使它工作,我不得不将返回的html按钮解析为jquery元素(似乎只有这样才能添加点击处理程序)

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

使用firefox和chrome测试过,它可以在这里运行。 希望这会有所帮助。


另外你说你的后端有一些问题(SESSION)。我无法帮助你,但是当mcoking /模仿我的测试用例中收到的响应时,它似乎都可以按你的需要工作。祝你好运。

答案 1 :(得分:0)

好的 - 我已经找出导致问题的原因:

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

应该只是:

session_start();

因为它自己检查会话是否已设置。

感谢大家的参与!