我正在使用Select2 3.3.1,并且在某个事件中,我可以访问多个文本输入中更改的元素,该文本输入用作创建和删除在我的网站上使用的标签的地方。我在迭代事件处理程序中返回的对象时遇到问题。具体来说,我想这样做是因为我想访问各个标签,并且事件处理程序返回参数包含这些对象,这些对象按添加或删除标签进行组织。所以,这是极好的。但是我尝试过的一切都失败了。
.on("change", function(e) {
alert(JSON.stringify({val:e.val, added:e.added, removed:e.removed}));
var added = JSON.stringify({added:e.added});
$.each(added, function(){
$.ajax({
url: '/db-interaction/tags.php',
data: {
'action': 'addtag',
'q': this
},
type: 'get',
success: function(output) {
}
});
});
上面第二行的命令
alert(JSON.stringify({val:e.val, added:e.added, removed:e.removed}));
显示此字符串
{"val":["newtag"],"added":{"id":"newtag","count":"0"}}
在警报中。
在这种情况下,我刚刚添加了单词“newtag”作为标签。我希望能够遍历这个内部列表中的这些项目。
我也尝试过双重嵌套循环,如下所示,但我得到了同样的错误。我不确定 JSON 字符串需要什么结构。
$.each(added, function(){
$.each(this, function(){
ajax 请求似乎没有执行,但我找不到错误。成功函数不执行,firebug 控制台出现错误。它说TypeError: invalid 'in' operand e
,指向 jquery 脚本。这是我的错误,我敢肯定。可能与我处理事件处理程序参数'e'的方式有关,但我不知道我做错了什么。
这是标签脚本。FWIW,addNewTag() 方法适用于其他用例。
<?php
session_start();
include_once "../inc/constants.inc.php";
include_once "../inc/class.tags.inc.php";
$tags = new Tags();
if (isset($_SESSION['LoggedIn']) && $_SESSION['LoggedIn']==1)
{
if(!empty($_POST['action']) )
{
switch($_POST['action'])
{
case 'addtag':
echo $tags->addNewTag();
break;
case 'removetag':
echo $tags->removeTag();
break;
case 'getalltags':
echo $tags->getAllTags();
default:
break;
}
}
else if(!empty($_GET['action']))
{
switch($_GET['action'])
{
case 'addtag':
echo $tags->addNewTag();
break;
case 'removetag':
echo $tags->removeTag();
break;
case 'getalltags':
echo $tags->getAllTags();
default:
break;
}
}
}
else
{
header("Location: /");
exit;
}
?>
还有 addNewTag() 方法,在其他情况下效果很好:
/**
* Adds a new tag, increment uses_count if it already exists
*
*
*/
public function addNewTag($name=NULL)
{
if ($name === NULL){
if (isset($_POST['q']) )
$u = $_POST['q'];
else if (isset($_GET['q']))
$u = $_GET['q'];
}
else{
$u = $name;
}
$sql = "INSERT INTO tags(name,uses_count) VALUES (:term,1)
ON DUPLICATE KEY UPDATE uses_count=uses_count+1;";
if($stmt = $this->_db->prepare($sql))
{
$stmt->bindParam(":term", $u, PDO::PARAM_STR);
$stmt->execute();
$stmt->closeCursor();
}
谁能帮我吗?如果有用的话,我可以描述我尝试过的其他事情以及为什么它们没有奏效。