我正在为我的漫画网站实施一个标记系统。
标记功能应该:
- 允许用户选择多个标签并显示他们选择的标签,选择的标签应该过滤显示的漫画
- 允许用户取消选择标签,这将更新他们选择的标签并更新返回的漫画
上图中我遇到问题的部分是蓝色的:
如果用户选择删除选定的标签,我如何才能回调同一个 php 脚本?
谢谢!
假设您只是将元素推入已知键下的 $_SESSION 数组中,那么仅检查元素是否存在是否可以接受?类似于
if(isset($_SESSION[$tag])) {
unset($_SESSION[$tag]);
} else {
$_SESSION[$tag] = 1;
}
要使用它,只需使用array_keys()
. 无需更改 JS 端。
您可以做的第一件事是发送一组正在被操作的标签。它们可能被添加或删除 - 没关系。
Javascript
$.get("getTags.php", {tags:["tag1","tag2","tag3"]}, function(data) {
//have PHP return an updated list of tags.
});
然后,您迭代发送的标签,并检查它们是否已经存在。如果它们存在,则删除它们。否则,您添加它们。
PHP
$tags = $_GET["tags"];
foreach ($tags as $tag) {
if (array_key_exists($tag, $_SESSION['tags'])) {
unset($_SESSION['tags'][$tag]);
} else {
$_SESSION['tags'][$tag] = $tag;
}
}
//Return your updated list of tags here.
然后,您可以根据需要返回更新的标签列表,以确保所有内容都同步。
另一种选择是通过在 AJAX 调用中发送“action”参数来明确说明您正在执行的操作:
Javascript
$.get("getTags.php", {action: "remove", tags: ["tag1"]}, function(data) {
//Do whatever
}
然后,在您的 PHP 中处理这种情况:
PHP
$availableActions = array("add", "delete");
$action = $_GET['action'];
//Make sure it's a valid action
$action = array_key_exists($action, $availableActions) ? $action : "add"; //Set a default.
//Now handle each action
switch ($action) {
case "add":
//Do stuff.
break;
case "delete":
//Do stuff.
break;
default:
}