Javascript 通过JQuery/AJAX获取预先填充的标记
我正在使用这个“bootstrap tags”jquery插件()为我正在开发的web应用程序添加一个简单的标记界面。在愉快的路径中,我可以让插件正常工作,但是我实际上需要从MySQL数据库中提取页面加载上显示的标签。我现在的代码是: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,
$.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。