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

Ger*_*rry 3 ajax jquery ruby-on-rails 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!")
    }
});
Run Code Online (Sandbox Code Playgroud)

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

非常感谢!

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

Ger*_*rry 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!")
    }
});
Run Code Online (Sandbox Code Playgroud)

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

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