我有一个"主页"控制器,具有相同的名称,在顶部包含一个boostrap导航栏。单击导航栏的各个选项后,视图底部的div将其内容替换为适当的部分(使用" replaceWith / render"调用.js.erb文件)
对于一个这样的局部,我有一个带有2个选择框的表格。这些需要在加载部分时动态填充,所以我试图将一些AJAX放在一起。下面是我迄今为止的AJAX工作(在我的部分代码的末尾找到):
<script>
// Get Perforce Suites
var xmlhttp;
if (window.XMLHttpRequest) // modern browser
{
xmlhttp=new XMLHttpRequest();
}
else // proper old school! IE 6 and older. Does anyone...? Never mind...
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
//processing of responsetext to go in here
}
}
xmlhttp.open("GET","/perforce_sync/getPerforce", true);
xmlhttp.send();
alert (xmlhttp.responseText);
</script>
所以你可以看到我仍然有响应处理...但是就目前而言,警报(xmlhttp.responseText)将回来为空。
我猜测它的xmlhttp.open是错误的 - 我试图在&#34; perforce_sync&#34;中尝试调用一个动作(getPerforce)。控制器。我没有在服务器输出中收到任何错误 - 但我也没有从请求中得到任何回复!
注意 - 以上脚本主要基于http://tinyurl.com/ygzdwg,其网址基于我在此处阅读的内容http://tinyurl.com/netps6v
欢迎任何指导!谢谢!
答案 0 :(得分:1)
让我解释一下如何使用ajax:
Ajax代表异步Javascript和XML - 这基本上意味着它使用Javascript代表您向服务器发送请求
浏览器中的JS可以处理响应,允许您根据需要操作DOM(更新页面而不刷新)
虽然你可以使用你所拥有的,JQuery has made Ajax a lot easier:
$.ajax({
url: "/perforce_sync/getPerforce",
data: [[form data]]
success: function(data) {
//append data to DOM
}
});
调用此选项将允许您在不刷新的情况下处理控制器所需的数据
<强>代码强>
为了向您提供具体信息,您已经提到您的应用需要根据第一个选择的值填充另一个选择框
我这样做:
#config/routes.rb
scope module: 'perforce_sync' do
get "getPerforce", to: "controller#action"
end
#app/assets/javascripts/application.js
$("#select1").on("change", function(){
$.ajax({
url: "/perforce_sync/getPerforce"
data: $(this).val(),
dataType: "json",
success: function(data) {
//handle data
},
error: function(data) {
alert("error");
}
});
});
#app/controllers/your_controller.rb
def action
respond_to do |format|
format.json
end
end