2011-10-24 38 views
3

你好,我有一個表單,遠程提交jQuery UJS for rails。我將綁定到beforeSend事件以允許我修改提交到服務器的數據。它不工作。這是我在前發送的內容:如何修改beforeSend事件中的ajax Post數據?

settings.data = JSON.stringify({ 
     'list_item[title]' : 'hi?? there' 
}) 

這是行不通的。在服務器日誌中,我看到:

Started POST "/lists/9/list_items" for 127.0.0.1 at 2011-10-24 14:04:36 -0700 
    Processing by ListItemsController#create as JSON 
    Parameters: {"{\"list_item"=>{"title"=>{"\":\"hi?? there\"}"=>nil}}, "list_id"=>"9"} 

任何想法我做錯了什麼?我想用不在表單中的字段自定義settings.data。謝謝

回答

2

你不需要將任何東西串起來放入settings.datadata is

要發送到服務器的數據。它被轉換成查詢字符串,如果還不是字符串的話。它附加到GET請求的url。 [...]對象必須是鍵/值對。

你在做什麼是把這個字符串:

"{"list_item[title]":"hi?? there"}" 

data但字符串不是查詢字符串這樣的事情會感到困惑。您應該能夠簡單地將您的JavaScript對象分配到settings.data

settings.data = { 'list_item[title]' : 'hi?? there' }; 

並讓jQuery從那裏對它進行排序。


更新基於證據,而不是文件:

然而,進一步調查發現,這是行不通的。如果我發送一個GET請求,我做出settings.data任何更改都將被忽略,但如果我發送POST請求,然後更改爲settings.data棒,但你必須使用查詢字符串格式通過得到任何合理的:

settings.data = encodeURIComponent('list_item[title]') 
       + '=' 
       + encodeURIComponent('hi?? there'); 

settings.data與POST請求合併版本得到我:

Parameters: {"list_item"=>{"title"=>"hi?? there"}} 
在服務器上

和看起來像你以後。如果你想保留一些原始參數,那麼你將不得不手動解包和重新包裝查詢字符串。

+0

謝謝,我試着用settings.data = {'list_item [title]':'hi ??那裏' };但後來我在日誌中看到:參數:{「object Object」=> nil,「list_id」=>「9」} I – AnApprentice

+0

@AnApprentice:我做了一些調查,jQuery的行爲相當奇怪.data'更改在'beforeSend'回調中涉及到,請查看我的更新。 –