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

Javascript 通过JQuery/AJAX获取预先填充的标记,javascript,php,jquery,twitter-bootstrap,tags,Javascript,Php,Jquery,Twitter Bootstrap,Tags,我正在使用这个“bootstrap tags”jquery插件()为我正在开发的web应用程序添加一个简单的标记界面。在愉快的路径中,我可以让插件正常工作,但是我实际上需要从MySQL数据库中提取页面加载上显示的标签。我现在的代码是: $.get("getCurrentTags.php", {"id": id] }, function(data) { $('#my-tag-list').tags({ tagData: data,

我正在使用这个“bootstrap tags”jquery插件()为我正在开发的web应用程序添加一个简单的标记界面。在愉快的路径中,我可以让插件正常工作,但是我实际上需要从MySQL数据库中提取页面加载上显示的标签。我现在的代码是:

$.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);
$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);

今天的大部分时间我都被困在这个问题上,完全被难住了;任何帮助都将不胜感激!谢谢

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

 $.getJSON("getCurrentTags.php", {"id": id}, function(data) {
   $('#my-tag-list').tags({
     tagData: data,
     bootstrapVersion: "2"
   });
 });
另一件需要注意的事情是,当您将未初始化的值直接插入SQL语句时,服务器端代码容易受到SQL注入的攻击。如果您可以使用,我建议您使用PDO。在您的示例中,我的服务器端代码如下所示:

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);
$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的一个很好的介绍。

一个观察结果是,您正在从php发送json作为响应,但没有在JavaScript中解析它。你试过用
$.getJSON
来代替吗?@scartz-我试过了,但是“数据”是一个数组,它似乎比我想要的更远,除非我误解了什么(很可能)。数组就是你想要的-我在下面贴了一个回复,非常感谢!我真的以为我以前尝试过使用.getJSON,但它没有起作用,但是你瞧,按照你的例子,它现在起作用了!非常感谢您的帮助,我一定会考虑将MySQL交互部分更新为PDO。