我有以下请求与curl
完美配合,但我无法使用jQuery的jQuery.ajax
函数系列:
curl -v -s -X GET -d 'matching[][name]=ottensen' http://localhost:3000/locations
诀窍是matching[][name]=ottensen
。当应用程序服务器解释时,这会产生以下内容:
params: { "matching" => [{"name" => "ottensen"}] }
换句话说,我已经通过了哈希数组。
curl
语法似乎很奇怪,但也受到广泛支持。
我用jQuery(最新)尝试了以下内容:
$.ajax({
url: 'http://localhost:3000/locations',
data: {
"matching": [{
"name": "ottensen"
}]
})
})
还有其他各种错综复杂的组合,不幸的是jQuery.serialize并不能很好地发挥作用,但是文档确实提到了:
注意:因为没有普遍认可的规范 param字符串,不可能编码复杂的数据结构 以适合所有语言的方式使用此方法 支持这样的投入。直到有这样的时间,$ .param 方法将保持其当前形式。
建议使用一些建议的JSON.stringify(obj)
变通方法,但现有客户端仍然可以访问API,我们无法将其更改为接受JSON,我们不应该这样做,这得到许多人的支持机架应用程序,似乎是某种标准(可能只是一个事实上的标准),这里是一个例子(大体上似乎按照人们的预期工作,但我不能改变后端服务器):
$.ajax({
url: 'http://localhost:3000/locations',
data: JSON.stringify({
"matching": [{
"name": "ottensen"
}]
}),
contentType: 'application/json',
dataType: 'json'
})
问题:因此,我的问题是,如何让jQuery将相同的内容发送到curl
正在执行的服务器?
Side Note(Serverside解决方法):服务器拥有这条神奇的代码,这让我非常非常伤心:matching = params.fetch(:matching); matching = Array(matching.values) if matching.is_a?(Hash)
,这是一个现在适用的解决方法,但我我宁愿不必在整个代码中复制它。
值得注意的是,我已经考虑过实现一个Rack中间件来修复传递的jQuery样式对象,因此它们可以像Rails那样工作(也就是说,从一个看起来像这样的jQuery请求中重写params,并且修复它们,以便Rails应用程序不知道发生了什么事情)