我有一个React客户端应用程序,需要与Rails API对话。我想使用rails-ujs方法Rails.ajax。例如:
Rails.ajax({
type: "POST",
url: "/things",
data: mydata,
success: function(response) {...},
error: function(response) {...}
})看起来,我无法将data设置为这样的JSON对象:
mydata = {
thing: {
field1: value1,
field2: value2,
}}我需要手动将其转换为application/x-www-form-urlencoded内容类型,如下所示:
mydata = 'thing[field1]=value1&thing[field2]=value2'对于平面数据来说,这是可以的,但是对于嵌套数据来说,这很快就变得复杂了。
jQuery在发出请求之前自动进行转换。
所以我想知道,Rails UJS是否有某种自动的方法,,但是我在文档或代码中找不到任何东西。
发布于 2019-12-15 00:55:22
使用Rails UJS时,必须将数据格式化为字符串窗体参数。不幸的是,它不可能提供JSON,至少目前没有Rails 6.0.2 (不理想)。
解决方案
使用URLSearchParams将JSON转换为URL参数:
myData = {
thing: {
field1: value1,
field2: value2,
}}
Rails.ajax({
type: "POST",
url: "/things",
data: new URLSearchParams(myData).toString()
})发布于 2019-11-20 19:27:29
下面是我使用内容-Type: application/json发布/发布的解决方法。
它通过在options.data回调中设置beforeSend来工作。这样,内部Rails.ajax.createXHR方法就不会首先设置Content标头。https://github.com/rails/rails/blob/master/actionview/app/assets/javascripts/rails-ujs/utils/ajax.coffee#L53
Rails.ajax({
url: 'http://some-url.com',
type: 'put',
beforeSend(xhr, options) {
xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8')
// Workaround: add options.data late to avoid Content-Type header to already being set in stone
// https://github.com/rails/rails/blob/master/actionview/app/assets/javascripts/rails-ujs/utils/ajax.coffee#L53
options.data = JSON.stringify(data)
return true
},
});发布于 2017-08-22 14:53:57
我多次使用ajax调用,并且经常像这样发送json数据。
var fd = new FormData();
fd.append("jsondata", JSON.stringify(mydata));
$.ajax({
url: ...
type :"post",
data: fd
success:function(){
}
})在ruby控制器中解析Json数据很容易。您可以只使用JSON.parse(params["jsondata"])
希望这对你的案子有用。
https://stackoverflow.com/questions/45820587
复制相似问题