AJAX调用控制器动作

时间:2014-03-26 15:23:48

标签: javascript ruby-on-rails ajax

我有一个"主页"控制器,具有相同的名称,在顶部包含一个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

欢迎任何指导!谢谢!

1 个答案:

答案 0 :(得分:1)

让我解释一下如何使用ajax:


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