1

这可能是一个新手问题,但我真的需要帮助。

我正在在线商店中创建愿望清单,如果用户已登录,愿望清单项目将保存在数据库中,未登录用户的愿望清单将通过 cookie 保存,我将 AJAX 用于愿望清单功能。一切都很顺利,只是在第一个 ajax 请求中没有更新 cookie。

这是我的第一步(ajax):

  1. 调用 ajax 请求更新愿望清单
  2. 根据新的 cookie 重新加载愿望清单模板

上述步骤不会自动更新愿望清单模板$_COOKIE[]需要刷新页面。

这是我更新的步骤(ajax)

  1. 调用 ajax 请求更新愿望清单
  2. 调用另一个 ajax 请求以重新加载愿望清单模板

上面的代码解决了问题,(调用第2步只是刷新$_cookie值。),但是需要两次ajax请求来更新wishlist,这需要一点时间来工作。我敢肯定,这不是最好的解决方案。我知道这是一个更好的解决方案。

请帮助:)

谢谢

4

1 回答 1

1

Cookie 可以单独通过设置。当您使用时,我认为您可以在不刷新任何页面的情况下很好地处理

这是您应该实现的逻辑。

  1. 向您的 PHP 页面发送 Ajax 请求。
    • 如果您已登录,PHP 会将数据保存在数据库中并返回状态值 1。
    • 否则 PHP 返回状态值 0。意味着您没有登录并且无法将其保存在数据库中。
    • 返回0时,PHP 可以填充$_COOKIE超全局。请求完成后,它将在浏览器中设置 cookie。
  2. 在您的 ajax 请求的回调事件中,您检查状态值。如果它0只是将数据保存在 cookie 中。此 cookie 可通过document.cookie. 这可以通过

使用 jQuery 的示例代码

// ajax.js
$.post("updatewishlist.php", 
{
    'wishlist_item':'wishlist_value'
},
function(json){
// callback function
    if(json.status==0){
        $.cookie('the_cookie', 'the_value', { expires: 7 });
    }
});

这里我使用了jquery cookie 插件

// updatewishlist.php
<?php
if(user_logged_in()){
// sanitize input here
// update database with $_POST['wishlist_item']
$status = 1;
}else{
// update the cookie
// manipulate $_COOKIE super global
$status = 0;
}

// echoing json

echo json_encode(array('status' => $status));

?>
于 2012-05-28T06:18:35.463 回答