如何修改beforeSend事件中的ajax Post数据?
您好我有一个表单,使用jQuery UJS for rails远程提交。 我绑定到beforeSend事件,允许我修改提交给服务器的数据。 它不起作用。 这是我在beforeSend中的内容:
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,添加不在表单中的字段。 谢谢
您不需要将任何字符串化以将其放入settings.data
。 data
是 :
要发送到服务器的数据。 如果不是字符串,它将转换为查询字符串。 它附加到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
stick但是你必须使用查询字符串格式来获得任何明智的结果:
settings.data = encodeURIComponent('list_item[title]') + '=' + encodeURIComponent('hi?? there');
settings.data
的版本与POST请求结合使我得到:
Parameters: {"list_item"=>{"title"=>"hi?? there"}}
在服务器上,看起来像你在追求什么。 如果要保留一些原始参数,则必须手动解压缩并重新打包查询字符串。