0

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

1 回答 1

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 进行检查,以更好地了解对象及其包含的内容。

于 2012-10-03T18:44:32.967 回答