在AJAX请求中传递null Rails将其解释为“null”

时间:2012-11-22 10:14:18

标签: jquery ruby-on-rails ajax ruby-on-rails-3

我正在尝试通过$.ajax向一个Rails 3后端发送一个AJAX请求,我坚持一个奇怪的行为。以下面的请求为例:

$.ajax({
    url: $(this).attr('href'),
    type: 'PUT',
    dataType: "json",
    data: {a: null},
    success: function (data) {
        console.log("success!")
    }
});

我绑定到click事件。简单。发生的事情是Rack将URI编码的表单参数解析为{"a" => "null"},我真的想要解析为{"a" => nil}。是否有任何非hackish方式来实现这种行为?

非常感谢!

P.S。如果我通过{a: undefined},则params hash根本没有a密钥。

1 个答案:

答案 0 :(得分:6)

好的,我找到了解决方法。我不得不将$.ajax调用更改为:

$.ajax({
    url: $(this).attr('href'),
    type: 'PUT',
    dataType: "json",
    contentType: "application/json",
    data: JSON.stringify({a: null}),
    processData: false,
    success: function (msg) {
        console.log("success!")
    }
});

这做了两件重要的事情。首先,它将内容类型标头传递给JSON,以便请求有效负载自动被Rack解析为JSON。另一个是processData必须设置为false才能阻止默认的jQuery行为:

  

默认情况下,作为对象传入数据选项的数据(技术上,不是字符串)将被处理并转换为查询字符串,适合默认内容类型" application / x- WWW窗体-urlencoded"