我遇到以下代码的问题,但不想在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": "£0.00",
"vat_total": "£0.00",
"total": "£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时不会创建会话。
有什么想法吗?
答案 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();
因为它自己检查会话是否已设置。
感谢大家的参与!