2012-10-03 100 views
0

下面的代碼是使用JQuery UI創建的自動完成輸入的一部分。 但我在這裏的問題只與JQuery-AJAX部分有關。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」)自動完成正在接受我在下面的代碼提供(這是代碼的一部分上方)源:

$("#c_t_v").autocomplete("option", "source", c_t_v_choices); 
+0

因爲它將JSON轉換爲JSON,而JSON是對象。 –

+0

改爲使用console.log - 它會告訴你孩子與警報相比。 – h2ooooooo

+0

'alert()'接受一個字符串,它不像PHP中的'var_dump()'。 – Orbling

回答

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進行檢查,以更好地理解對象及其包含的內容。

+0

當我在Firebug中觀看變量'msg'時,我得到這個輸出:「[{」label「:」City1「},{」label「:」City2「},{」label「:」City3「} ,{「label」:「City4」}]。這是否提供了上述行爲發生的原因? –

+0

此外,如果您能夠告訴我需要什麼以便最終數組是對象數組,其中包含以下格式的數據:[{label:「City1」},{label:「City2」} ...] –

+1

您不需要觀察變量,將變量的控制檯日誌和在Firebug的控制檯窗口中檢查它,爲了讓JSON成爲一個可用的對象,你需要指定dataType:「JSON」,如果你這樣做了控制檯日誌記錄,你會發現它是一個可用對象。 –