How to modify the ajax Post data in a beforeSend event?

非 Y 不嫁゛ 提交于 2019-12-22 09:39:44

问题


Hello I have a form that submits remotely with the jQuery UJS for rails. I binded to the beforeSend event to allow me to modify the data submitting to the serve. It's not working. Here is what I have in the beforeSend:

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

This doesn't work. In the server logs I see this:

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"}

Any idea what I'm doing wrong? I want to customize the settings.data with added fields that aren't in the form. Thanks


回答1:


You don't need to stringify anything to put it in settings.data. The data is:

Data to be sent to the server. It is converted to a query string, if not already a string. It's appended to the url for GET-requests. [...] Object must be Key/Value pairs.

What you're doing is putting this string:

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

into data but that string is not a query string so things are going to get confused. You should be able to simply assign your JavaScript object to settings.data:

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

and let jQuery sort it out from there.


Update based on evidence rather than documentation:

However, further investigation reveals that this doesn't work. If I send a GET request, any changes I make to settings.data are ignored but if I send a POST request, then changes to settings.data stick but you have to use the query string format to get anything sensible through:

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

The version of settings.data combined with a POST request gets me this:

Parameters: {"list_item"=>{"title"=>"hi?? there"}}

on the server and that looks like what you're after. If you want to preserve some of the original parameters then you'll have to unpack and repack the query string by hand.



来源:https://stackoverflow.com/questions/7881982/how-to-modify-the-ajax-post-data-in-a-beforesend-event

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!