javascript - 如何在 beforeSend 事件中修改 ajax Post 数据?

标签 javascript jquery ruby-on-rails ruby-on-rails-3 ujs

您好,我有一个使用 jQuery UJS for rails 远程提交的表单。我绑定(bind)到 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.datadata 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.

你正在做的是把这个字符串:

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

在服务器上,这看起来像你所追求的。如果您想保留一些原始参数,则必须手动解压并重新打包查询字符串。

关于javascript - 如何在 beforeSend 事件中修改 ajax Post 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7881982/

相关文章:

javascript - 使用谷歌脚本对谷歌表格中的数据进行排序(使用自定义排序顺序)

javascript - 连字符导致结果为空

ruby-on-rails - 如何在 RSpec 中 stub 两个链接的 ActiveRecord 方法?

javascript - 从 iframe 获取文本

javascript - 使用 selenium 从 window.location 获取 url

javascript - 在 Node.js 中通过相对路径显示图像

jquery mobile click() 在 ListView 上

jquery - 单击以选择和取消选择单个下拉菜单,就像在 bootstrap-select 中选择多个一样

javascript - 如何通过HTTP头正确地将JavaScript对象传递到Rails后端?

ruby-on-rails - rails 3.1.3 上的简单验证码安装问题