2011-06-02 57 views
1

我有下面的代码,它不希望在Chrome和Safari的工作问题:与谷歌Chrome和Safari在Mac OS jQuery的SESSION问题X 10.5只

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)的发生 - 但没有对雪豹 - 使用浏览器(Chrome浏览器11.0.696.71)

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

有什么想法?

+0

每种情况下发送的是哪个网址?你能用调试器来观察整个请求和响应吗? – 2011-06-02 20:57:23

+0

每次都有相同的网址 - 只是网址中的参数可能会有所不同。调试信息窗口是空的。 – user398341 2011-06-02 20:59:56

+0

这种东西被发送错误或后端问题的味道。显然你正在得到回应。后端做错了什么?如果你从一个失败的案例复制/粘贴url到你的url栏,你会得到同样的结果吗? – 2011-06-02 21:05:37

回答

0

好了 - 我已经想通了,是什么原因导致的问题:

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

这应该仅仅是:

session_start(); 

,因为它会检查自己的会话是否被设置。

感谢大家参与!

1

我在jsfiddle中创建了一个简单的测试用例。我不知道为什么你的例子在其他浏览器中工作,但它不应该,除非你已经从问题中省略了一些代码。

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

为了使它的工作,我不得不添加解析返回的HTML按钮进入一个jQuery元素(似乎只有这样单击处理加)

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

与Firefox和Chrome测试这,它在这里工作。 希望这有助于。


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

+0

谢谢 - 但看起来问题在于会话 - 因为它不会在单击按钮后在服务器上创建会话。我也尝试了登录表单 - 而且我也无法登录 - 真的很奇怪 - 这是我第一次遇到类似这样的内容。 – user398341 2011-06-03 08:33:34