我使用了这个例子https://stackoverflow.com/a/7601415/2118559
但是我不能让它正常工作
首先在外部php文件中有这样的数组$fetch_child_topic
Array
(
[TopicName] => A
[TopicUrl] => a
)
在外部PHP文件中,我将其转换为JSON
echo json_encode($fetch_child_topic, JSON_HEX_QUOT|JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_APOS);
在"主文件"中,JavaScript看起来像这样{"TopicName":"A","TopicUrl":"a"}
,它的名字是data
。
这里尝试创建下拉菜单
for (var text in data) {
alert( 'text ' + text + ' data' + data );
var val = data[text];
$('<option/>').val(val).text(text).appendTo($('#first_subcat_id'))
};
下拉菜单得到长列表的数字,如0,1,2…但我希望看到字母A
。
在警告中我看到
text 0 data{"TopicName":"A","TopicUrl":"a"}
text 1 data{"TopicName":"A","TopicUrl":"a"}
....
text 31 data{"TopicName":"A","TopicUrl":"a"}
有问题…但我不明白。
有什么想法吗?编辑PHP文件中的代码是这样的(代码稍微修改,只有一列)
从mysql获取数据
try {
$stmt = $db->prepare("SELECT TopicName FROM $table_name WHERE UpperTopicName = ?");
$stmt->execute( array($_POST['main_topic']) );
$fetch_child_topic = $stmt->fetchAll(PDO::FETCH_COLUMN);
}//try {
catch (PDOException $e){
echo "<br> Url DataBase Error: " .htmlspecialchars( $e->getMessage() , ENT_QUOTES, "UTF-8").'<br>';
}
catch (Exception $e) {
echo " Url General Error: ".htmlspecialchars( $e->getMessage() ).'<br>';
}
和
echo json_encode($fetch_child_topic, JSON_HEX_QUOT|JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_APOS);
<<p> 解决方案/strong> 从外部php文件(jquery变量的名称是data
)获取数据后,执行
var data = $.parseJSON( data );
$.map( data, function( val, i ) {
$('<option/>').val(i).html(val).appendTo('#first_subcat_id');
});
在下拉菜单中得到字母A, B(如预期)
你的JavaScript在源代码中应该是这样的:
var data = {"TopicName":"A","TopicUrl":"a"}; // <== this is a javascript object literal assigned to the variable "data"
var text, val;
for (text in data) {
val = data[text];
alert( 'text ' + text + ', val' + val);
$('<option/>').val(val).text(text).appendTo($('#first_subcat_id'));
}
如果你有像
这样的HTML<select id="first_subcat_id"></select>
如果你的var data =
行不是这样的结构,那么你的PHP有问题。
如果你的PHP文件正在生成整个文档,你可以将json_encode
的输出嵌入到JavaScript中,就像这样。
<script type="text/javascript">
var data = <?= json_encode($fetch_child_topic, JSON_HEX_QUOT|JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_APOS); ?>;
var text, val;
for (text in data) {
val = data[text];
alert( 'text ' + text + ', val' + val);
$('<option/>').val(val).text(text).appendTo($('#first_subcat_id'));
}
</script>
我不认为fetchAll会返回数组的格式,你已经在你的例子的顶部显示。它返回一个由关联数组组成的数组大概是
Array
(
[0] => Array
(
[TopicName] => A
[TopicUrl] => a
)
)
你需要去掉外部数组。所以就像这样做……这取决于SQL查询返回的实际输出。
$fetch_child_topic = $fetch_child_topic[0];