Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery无法从JavaScript对象获取正确的下拉菜单值_Javascript_Php_Jquery - Fatal编程技术网

jQuery无法从JavaScript对象获取正确的下拉菜单值

jQuery无法从JavaScript对象获取正确的下拉菜单值,javascript,php,jquery,Javascript,Php,Jquery,我用了这个例子 然而,我不能让它正常工作 首先在php文件外部有这样的数组$fetch\u child\u 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看

我用了这个例子

然而,我不能让它正常工作

首先在php文件外部有这样的数组
$fetch\u child\u 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'))
 };
有点不对劲。。。但我不明白是什么

有什么想法吗

编辑

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>';
}
解决方案

从外部php文件(jquery变量的名称是
data
)获取数据后,执行了以下操作

var data = $.parseJSON( data );
$.map( data, function( val, i ) {
$('<option/>').val(i).html(val).appendTo('#first_subcat_id');
});
var data=$.parseJSON(数据);
$.map(数据,函数(val,i){
$('').val(i).html(val).appendTo('first#u 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'));
}
我不认为fetchAll会以示例顶部显示的格式返回数组。它返回一个关联数组,因此可能更像

Array
(
   [0] => Array
      (
         [TopicName] => A
         [TopicUrl] => a
      )
)
你需要去掉外部阵列。所以就这样做吧。。。取决于SQL查询的实际输出返回的内容

$fetch_child_topic = $fetch_child_topic[0];

我认为你把jQuery(一个JavaScript库)和JavaScript对象文字(一种创建JavaScript对象的方法)搞混了。是的,如果我命名var数据(与php无关),那么下拉菜单见TopicName和TopicUrl。有什么不对劲吗php@user2118559在哪里输出echo语句,可以显示周围的文本吗?是指“外部”php文件中的代码吗?如果是,我将在中添加代码question@user2118559好的,谢谢。我想知道您是如何将
json_encode()
函数生成的字符串获取到JavaScript的。看来,
json_encode
传递的是字符串,而不是数组。尝试更改为jquery数组。添加了
var data=$.parseJSON(数据)现在在下拉菜单中查看正确的数字数量。但我希望看到信件。
<select id="first_subcat_id"></select>
<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>
Array
(
   [0] => Array
      (
         [TopicName] => A
         [TopicUrl] => a
      )
)
$fetch_child_topic = $fetch_child_topic[0];