【问题标题】:How to modify the ajax Post data in a beforeSend event?如何在 beforeSend 事件中修改 ajax Post 数据?
【发布时间】:2011-10-24 21:07:17
【问题描述】:

您好,我有一个使用 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。谢谢

【问题讨论】:

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


    【解决方案1】:

    您无需对任何内容进行字符串化即可将其放入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"}}
    

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

    【讨论】:

    • 谢谢,我用 settings.data = { 'list_item[title]' : 'hi??那里' };但后来我在日志中看到了这个: 参数:{“object Object”=>nil,“list_id”=>“9”} I
    • @AnApprentice:我做了一些调查,就settings.data 的变化而言,jQuery 的行为相当奇怪,在beforeSend 回调中,请看看我的更新。
    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    相关资源
    最近更新 更多