我正在尝试通过$.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
密钥。
答案 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"