3

我试图通过$.ajax向 Rails 3 后端发送 AJAX 请求,但我遇到了一个奇怪的行为。以以下请求为例:

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

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

非常感谢!

PS 如果我通过{a: undefined}了,那么 params 哈希根本就没有a密钥。

4

1 回答 1

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 行为:

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

于 2012-11-22T11:38:57.930 回答