以下代码是使用JQuery UI创建的自动完成输入的一部分。 但我的问题只与JQuery-AJAX部分有关。
change: function(event, ui){
$.ajax({
type: "POST",
url: "includes/c_t_v_choices.php",
data: { filter: ui.item.value },
//dataType: "JSON",
}).done(function( msg ) {
c_t_v_choices = msg;
alert( "Data Saved: " + c_t_v_choices );
$("#c_t_v").autocomplete("option", "source", c_t_v_choices);
});
c_t_v.php文件的最后一行是:
echo json_encode($return_arr);
代码当前的方式,我在php文件发送的警报中看到了有效数据。示例如下所示:
Data Saved: [{"label", "value"}, {"label", "value"}...]
但是,当我启用该行时:
dataType: "JSON",
我看到类似的东西:
Data Saved: [object: Object], [object: Object]
为什么会出现这种奇怪的行为?
在旁注,任何想法为什么$(“#c_t_v”)。autocomplete接受我在下面的代码中提供的来源(这是上面代码的一部分):
$("#c_t_v").autocomplete("option", "source", c_t_v_choices);
答案 0 :(得分:1)
Data Saved: [{"label", "value"}, {"label", "value"}...]
在此实例中记录此数据,如console.log(typeof your_data_var)
- 是字符串吗?
当您指定JSON时,jQuery会将返回的json STRING转换为对象数组,以便您可以使用点表示法轻松访问json层次结构,例如: Parent.child.something
。
这是jQuery处理JSON响应的正常方式,因为它比使用数组更优雅,查找更快:)
PS如果你不是我建议你使用console.log
,console.dir
可以方便地使用数组/对象,并使用Firebug进行检查以更好地理解对象及其包含的内容。