所以我在视图上有这段代码:
var variable_test = 'begin';
$.ajax({
url : "/controller/index",
type : "post",
data : variable_test
}).done(function(response) {
alert('1');
})
.fail(function (error) {
alert('2');
});
var eia = <%= @variable.to_json.html_safe %>;
alert(eia);
在控制器上我有这个:
def index
@someVariable = 'end'
@variable = params[:variable_test]
end
执行时这将是结果:
带有1的对话框消息(所以它应该已经工作并发布了一些东西)
带有null的对话框消息
这是服务器端POST请求:
Started POST ...
Processing by Controller#index as */*
Parameters: {"begin"=>nil}
...
...
Current user: anonymous
...
Completed 200 OK...
那有什么不对?它实际上是将变量variable_test
发布到控制器variable
吗?如果是,为什么它将其读为空?如何解决这个问题?
答案 0 :(得分:2)
它会在帖子中发送您的价值。问题是data
将对象作为值,因此如果要将服务器端的值读为params[: variable_test]
,则需要进行ajax调用
var variable_test = 'begin';
$.ajax({
url : "/controller/index",
type : "post",
data : { variable_test: variable_test },
}).done(function(response) {
alert('1');
}).fail(function (error) {
alert('2');
});
另一方面,我不确定你要完成什么,你拥有的索引操作将尝试渲染你在app / views / controller /下的index.html.erb文件,是是否在ajax请求中调用了相同的索引操作?
很抱歉没有评论,没有足够的声誉。
答案 1 :(得分:1)
这种方式非常简单。
您的Ajax 似乎将您的请求发送给您的控制器:
Started POST ...
Processing by Controller#index as */*
Parameters: {"begin"=>nil}
......这是你的反应,没有被抓住......
#app/assets/javascripts/application.js
$.ajax({
url : "/controller/index",
type : "post",
data : {serialized: "data"}, // data should be serialized
}).done(function(response) {
alert('1');
}).fail(function (error) {
alert('2');
});
此设置应触发alert('1')
功能。
处理回应是你不满意的地方:
<强> 1。 ERB
在资产管道中不起作用
#app/assets/javascripts/application.js
var eia = <%= @variable.to_json.html_safe %>; // won't work
alert(eia); // won't work
这将不工作。
将使用ajax .done
方法中返回的数据:
#app/controllers/controller_controller.rb
class ControllerController < ApplicationController
def index
@variable = {}
@variable.attribute = "test"
respond_to do |format|
format.json { render json: @variable }
end
end
end
#app/assets/javascripts/application.js
$.ajax({
url : "/controller/index",
type : "post",
data : {serialized: "data"}, // data should be serialized
}).done(function(response) {
json = JSON.parse(response);
alert(json.attribute)
}).fail(function (error) {
alert('2');
});
这应该返回数据,允许您将其输出到视图
-
<强> 2。使用服务器端JS
除了ERB
在前端不起作用的事实之外,你还必须看看你的JS是如何被调用的。
你必须记住JS是前端;它没有任何访问您的Ruby
变量的权限。因此,如果您尝试访问视图中返回的数据, 需要从服务器捕获响应(#1),或运行服务器端JS喜欢这样:
#app/controllers/controller_controller.rb
class ControllerController < ApplicationController
def index
respond_to do |format|
format.js #-> calls app/views/controller/index.js.erb
end
end
end
每当您运行index.js.erb
操作时,这将调用index
- 允许您使用您在Ruby中定义的任何数据:
#app/views/controller/index.js.erb
var eia = <%= @variable.to_json.html_safe %>;
alert(eia);
这也必须与删除前端ajax中的响应挂钩同时发生:
#app/assets/javascripts/application.js
$.ajax({
url : "/controller/index",
type : "post",
data : {serialized: "data"}, // data should be serialized
});