通过JQuery / AJAX获取预先填充的标签

时间:2014-03-10 02:39:34

标签: javascript php jquery twitter-bootstrap tags

我正在使用这个“bootstrap-tags”jquery插件(https://github.com/maxwells/bootstrap-tags)为我正在处理的网络应用添加一个简单的标记界面。在快乐的路径中,我可以让插件正常工作,但实际上我需要从MySQL DB中拉出页面加载时显示的标签。我现在的代码是:

$.get("getCurrentTags.php", 
    {"id": id] }, 
    function(data) { 
        $('#my-tag-list').tags({
              tagData: data,
              bootstrapVersion: "2"
        });
    }
);

这样做实际上会在Chrome控制台中出现以下错误:

Uncaught TypeError: Cannot use 'in' operator to search for '12' in ["Civil War"]

认为这更像是一个普遍的问题,并且与'数据'如何格式化进入我的回调函数有关,特别是因为如果我手动输入类似的东西它会起作用

tagData: ["Civil War"]    

但我无法弄清楚究竟是什么。

为了彻底,我的'getCurrentTags.php'看起来像这样:

include('db.php');
$oid = $_GET['id'];

$currentTags = array();
$currentTagsQuery = mysql_query("SELECT tag_name 
    FROM t_tag t
    JOIN t_object_tag ot ON ot.tag_id = t.tag_id
    WHERE ot.id = {$oid};")
or die(mysql_error());

while($tag = mysql_fetch_assoc($currentTagsQuery))
{
    $currentTags[] = $tag['tag_name'];
}

echo json_encode($currentTags);

我今天大部分时间都被困在这上面而且完全被困住了;任何帮助都将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:0)

我在本地重新创建了您的示例,并使用以下方式执行:

 $.getJSON("getCurrentTags.php", {"id": id}, function(data) {
   $('#my-tag-list').tags({
     tagData: data,
     bootstrapVersion: "2"
   });
 });

另外需要注意的是,当您将未经过类型化的值直接插入SQL语句时,您的服务器端代码很容易受到SQL注入攻击。如果您可以使用,我建议您使用PDO。在您的示例中,我的服务器端代码如下所示:

$db = new PDO("mysql:host=localhost;dbname=test", 'root', '');

$stmt = $db->prepare(
 "SELECT tag_name 
  FROM t_tag t
  JOIN t_object_tag ot ON ot.tag_id = t.tag_id
  WHERE ot.id =  :id"
);
$stmt->bindParam(":id", $_GET['id']);
$stmt->execute();

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

$currentTags = array();

foreach($result as $row) {
  $currentTags[] = $row['tag_name'];
}

echo json_encode($currentTags);

可以找到对PDO的一个很好的介绍here