使用JSON在浏览器和控制器之间来回传递值
Passing Values Back and Forth from Browser to Controller Using JSON
我在控制器中使用JSON.parse()
找到了解析(Firefox)浏览器发送的JSON字符串错误的解决方案,但没有更好的解决方案吗?
Json (1.6.1)
视图->控制器
views/theme_maps/edit.html.erb
:
var labels = ["4", "5"];
document.getElementById("labels").value = JSON.stringify(labels);
(html)
<% form_for(@theme_map}) do |f| %>
<input type="hidden" id='labels' name='labels' />
<%= f.submit 'Update' %>
<% end %>
theme_maps_controller#update
:
labels = params[:labels] # get it from the hidden field
的问题,我的hack解决方案,在这里:
# labels.inspect returns: "'"['''"4'''", '''"5'''"]'""
# JSON.parse(labels) throws an exception.
labels.gsub!('"[', '[') # remove the quotes
labels.gsub!(']"', ']') # around the brackets.
labels.gsub!('''', '') # remove the escaped backslash.
# now labels.inspect returns: "['"4'", '"5'"]"
labels_array = JSON.parse(labels)
# now it's happy.
控制器->视图
只是为了把事情弄清楚,因为我花了很长时间才弄明白:
theme_maps_controller#edit
:
(ruby)
label_list = ["1", "2","3"]
@json_labels = label_list.to_json
views/theme_maps/edit.html.erb
:
var exist_labels = <%= @json_labels %>;
看起来目标是在服务器上接收如下内容:
params[:labels] # ["1", "4", "5"]
老实说,你应该在这里选择一个mime类型并坚持使用它。如果您愿意使用实际的JSON数据发布(例如,通过AJAX调用),那么您提交的数据将无需服务器端更改即可工作,并且看起来像这样:
{labels: ["1", "4", "5"]}
如果你正在提交表单数据,那么你的请求应该是这样的:
labels=1&labels=4&labels=5
同样,这将被正确解释,而不需要更改服务器端。
TLDR:不要尝试编码和解码填充到表单字段中的JSON字符串,这在客户端或服务器上没有多大意义。
问题是使用JSON.stringify()
。我们需要的是.toSource()
。
var labels = ["4", "5"];
// document.getElementById("labels").value = JSON.stringify(labels);
document.getElementById("labels").value = labels.toSource();
相关文章:
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- 在控制器和数据对象之间同步数据
- Nodejs API控制器,用于在API之间切换
- 在控制器之间切换,可以't更新视图
- 使用服务(AngularJS)在控制器之间共享数据
- 通过共享服务在两个不同ng应用程序中的控制器之间共享数据
- 在控制器之间传递变量的最佳方式
- 使用Angularjs在两个不同页面的控制器之间共享数据
- 在Angular Bootstrap Modal和父控制器之间共享作用域
- 2ng控制器,并且需要在控制器之间共享数据
- 在控制器angular js之间共享数据
- 访问angularJS中页面之间的控制器
- 如何将json文件中的数据提取到对象数组中,并在两个控制器之间共享
- 控制器和支持路由之间的角度保持选择
- 如何在多个控制器之间封装设置$scope值
- 在angularJS中使用模态窗口时,在控制器之间共享对象数组
- 在角度上不同控制器之间共享状态
- AngularJS:如何在控制器之间传递变量
- 在OnsenUI+AngularJS+PhoneGap中的控制器之间传递数据
- 使用 AngularJS 在控制器之间传递变量