2010-07-16 28 views
15

我現在有以下JavaScript數組:如何在AJAX調用期間刪除JS變量名稱末尾的方括號?

var data = { 
    'stuffs': stuffs 
}; 

$(".output").load("/my-server-code/", data, function() { 
}); 

在服務器端,如果我打印request.POST含量(I:

var stuffs = ['a', 'b']; 

我使用jQuery的load傳遞上述給服務器代碼「M目前使用Django),我得到:

'stuffs[]': [u'a', u'b'] 

通知的[]在PREF ix的變量名稱爲stuffs。有沒有辦法在達到服務器代碼之前刪除那個[]

回答

31

這是默認行爲in jQuery 1.4+ ...如果你想的帖子是&stuffs=a&stuffs=b而不是&stuffs[]=a&stuffs[]=b你應該設置traditional optiontrue,像這樣:

$.ajaxSetup({traditional: true}); 

注意這將影響所有的請求......這通常是你想要的這種情況。如果你想要它是每個請求你應該使用更長的$.ajax()調用並在那裏設置traditional: trueYou can find more info about traditional in the $.param() documentation

+4

1.10 $ .ajaxSettings不可調用 - 應該使用$ .ajaxSetup - 它的用法與上面相同。 – 2013-11-04 11:40:48

-3

[]表示該變量是一個數組。我想象[]附加到你的變量名是Python/Django告訴你它是一個數組的方式。你可能可以實現你自己的打印功能,不會顯示它們。

+0

這是否意味着[]的附加來自Django而不是JavaScript? – 2010-07-16 15:44:09

-1

當使用GET請求通過表單或AJAX提交數組時,將爲每個元素指定數組的名稱,然後是一對可選的空方括號。所以jQuery生成的網址爲http://example.com/get.php?stuff[]=a&stuff[]=b。這是提交數組的唯一方法,並且JavaScript遵循標準。

POST請求以完全相同的方式工作(除非將json作爲一個長json字符串發送)。

在PHP中,這被解析回原始數組,因此雖然查詢字符串可能有點奇怪,但數據在發送時會收到。 $_GET['stuff'][0]在PHP中正常工作。

我不確定Django如何解析查詢字符串。

+1

「這是提交數組的唯一方式,並且JavaScript遵循標準。」 - 它不是標準的,而是Rails/PHP的慣例。數組可以完全合法地作爲foo = 1&foo = 2發送。 – jholster 2012-11-15 16:17:40