JQuery.ajax中的奇怪行为

时间:2012-10-03 18:40:21

标签: jquery jquery-ui jquery-ui-autocomplete

以下代码是使用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);

1 个答案:

答案 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.logconsole.dir可以方便地使用数组/对象,并使用Firebug进行检查以更好地理解对象及其包含的内容。