2011-07-08 26 views
12

我有以下代碼時刪除空陣列。當我檢查使用Chrome發送的內容時,我發現「佈局」參數甚至沒有發送到後端腳本。JQuery的發送

由於空數組和缺少數組之間存在差異,我想讓JQuery發送空數組。我可以發現一些跡象表明JQuery(1.6.1)似乎這樣做,但不是如何阻止它這樣做。 JSON格式允許空數組和空對象,所以我認爲它應該是可能的。

有沒有人知道要改變什麼,所以JQuery可以發送空數組?

+0

爲什麼發送一個空參數?如果你想設置一個標誌或標記或其他東西,只需要執行'layout:true'。 – Bojangles

+0

嘗試'「[]」'。應該做的訣竅 – eagor

回答

-4

我不知道爲什麼你需要發送一個空白參數。僅僅檢查PHP腳本中參數的存在就足夠了。但是,如果您確實想要這樣做,請使用'layout': [""]而不是'layout': []。該參數應該被髮送。

(另外,你可能要重新命名layoutlayout[]以表明它是一個數組,但這是不必要的。)

+0

該代碼維護容器的樹結構,其中包含字段。 客戶端腳本需要與後端進行通信,以瞭解容器是否已清空(空白數組)或完全從樹中刪除(無條目)。 –

+0

請考慮我有複雜模型中用戶刪除的列表項目。通常我只更新更改的字段。如果我完全沒有參數,字段不會被更新,並且項目列表不會被更新 - 但是當我設置items = array()時,所有項目都應該被刪除?或甚至'items = null',但沒有任何(post/get)信息模型不知道它是否應該觸摸'items'字段! – 2013-02-07 13:01:19

+0

PeterM你找到了解決辦法嗎?我正在體驗你所說的。如果發送空數組,我想刪除所有項目,如果數組中有項目,我想添加那些不在那裏的項目,並刪除那些不應該存在的項目。最後,沒有或null應該跳過檢查。 – Autonomy

-1

試試這個:

(isset($_POST['layout'])) ? $_POST['layout'] : array(); 

得到一個新的空數組,如果傳遞的數組是空的,否則就是包含數據的「真實」數組。

+2

這將適用於簡單的情況,但它仍然是煩人的 – 2013-02-07 13:02:16

+2

我知道這是一個非常非常古老的答案,但我需要低估這一點,因爲它根本不回答問題。你只是在修復bug的結果,而不是bug本身。如果用戶沒有任何空數組,則用戶不需要空數組,如果用戶想要發送空數組。 A:一個空的列表,B:沒有。 – thisisboris

0

我認爲JSON將在這樣的情況下幫助

在JS數組編碼和PHP

結果發送然後解碼它,但是這將花費一些資源

7

我們的組織有兩個方法到問題:

  • 發送數據作爲JSON而不是POST數據是一種很好的多用途方法,雖然有時有點難以與幀集成像Rails一樣工作,因爲您可能需要添加明確的後端調用來解碼JSON數據。
  • [""]正如vinod所指出的那樣,許多框架(例如Rails)經常將它視爲一個空陣列。 (原因見this Stack Overflow answer)。
    • 注意:在嘗試與Rails的某些方面集成時,特別是在發送與has_many關係相關的對象的ID列表時,這起作用。例如。如果您有foos表和bars表和fooshas_many :bars through :foo_bars,則刪除foo對象上的所有關聯的方法是通過foo: { bar_ids: [""] }

兩種方法都是比預期的hackier,我會很高興地發現一個更簡潔的方法。

+1

很好的答案,但實際上rails並不把'['']'當作一個空數組:''''] .empty? #=>假' '[''] .blank? #=> false' –

+0

@AlterLagos在一般情況下可以修正,但當作爲POST數據收到時,Rails似乎將'['']'視爲空數組。 (例如在我的筆記中,Rails並沒有創建一個將指定的'foo'映射到'bar_id:「」'的關係 - 它只是刪除了所有的foo/bar關係) –

+1

哦,nvm,我剛剛意識到你的筆記事實上,這應該只適用於ID列表。在我的情況下,它是一個json字段,因此它像一個空字符串數組一樣被保存到數據庫中。 –