为什么ajax将json解析为“a = b& c = d”形式?

时间:2014-03-14 22:51:21

标签: ajax json parsing

    $.ajax({
        url: '/metadata/hg_billing_cycle',
        data: {"a":"b", "c":"d"},
        datatype: "json",
        contentType: "application/json",
        type: 'POST',
        error: handleError,
    });

我在服务器上使用ruby:

post "/" do
  puts "ummm: #{request.body.read}"
end

我得到以下输出: ummm: a=b&c=d代替ummm : {"a":"b", "c":"d"}。为什么要这样做?

1 个答案:

答案 0 :(得分:1)

您正在从$.ajax docs

传递一个对象作为数据参数
  

数据
  键入:PlainObject或String
  要发送到服务器的数据。如果不是字符串,它将转换为查询字符串。它附加到GET请求的URL。请参阅processData选项以防止此自动处理。对象必须是键/值对。如果value是一个数组,jQuery会根据传统设置的值使用相同的键序列化多个值(如下所述)。

因此您的对象将转换为查询字符串 如果你想发送json,那么你必须发送json
将您的对象转换为json(使用JSON.stringify)并将其作为数据参数传递。

$.ajax({
    url: '/metadata/hg_billing_cycle',
    data: JSON.stringify({"a":"b", "c":"d"}),
    datatype: "json",
    contentType: "application/json",
    type: 'POST',
    error: handleError,
});