Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对控制器操作的AJAX调用_Javascript_Ruby On Rails_Ajax - Fatal编程技术网

Javascript 对控制器操作的AJAX调用

Javascript 对控制器操作的AJAX调用,javascript,ruby-on-rails,ajax,Javascript,Ruby On Rails,Ajax,我有一个“主页”控制器,具有相同名称的视图,顶部有一个引导导航条。单击导航栏的各种选项后,视图底部的div将其内容替换为适当的部分(使用.js.erb文件中的“replaceWith/render”调用) 对于其中一个部分,我有一个带有2个选择框的表单。这些需要在加载部分时动态填充,所以我尝试将一些AJAX放在一起。以下是我迄今为止在AJAX方面所做的努力(见我的部分代码末尾): //获得Perforce套房 var-xmlhttp; if(window.XMLHttpRequest)//现代

我有一个“主页”控制器,具有相同名称的视图,顶部有一个引导导航条。单击导航栏的各种选项后,视图底部的div将其内容替换为适当的部分(使用.js.erb文件中的“replaceWith/render”调用)

对于其中一个部分,我有一个带有2个选择框的表单。这些需要在加载部分时动态填充,所以我尝试将一些AJAX放在一起。以下是我迄今为止在AJAX方面所做的努力(见我的部分代码末尾):


//获得Perforce套房
var-xmlhttp;
if(window.XMLHttpRequest)//现代浏览器
{
xmlhttp=新的XMLHttpRequest();
}
否则的话,这就是老派!IE 6及以上。有人。。。?不要介意。。。
{
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
//处理要进入此处的responsetext
}
}
open(“GET”,“/perforce\u sync/getPerforce”,true);
xmlhttp.send();
警报(xmlhttp.responseText);
所以你可以看到我仍然有响应处理要做。。。但目前,警报(xmlhttp.responseText)返回为空

我猜是xmlhttp.open错了——我试图在“perforce\u sync”控制器中调用一个操作(getPerforce)。我没有在服务器输出中得到任何错误,但是我也没有从请求中得到任何东西

注意-上面的脚本主要基于我在这里读到的URL


欢迎任何指导!谢谢

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


Ajax代表异步Javascript和XML,这基本上意味着它使用Javascript代表您向服务器发送请求

然后,浏览器中的JS可以处理响应,允许您根据需要操作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

您使用纯JS进行ajax XHR调用有什么特别的原因吗?你现在使用JQuery了吗?没有任何理由!我对Ruby、Rails、jQuery、AJAX等的整个世界都很陌生,所以我一直在用谷歌搜索我的生活!所以我现在提出了这个(不确定它在评论中的发布效果如何,但是…
var request=$.get(/perforce\u sync/getPerforce”);request.success(函数(result){alert(“res:+result”)}request.error(函数(jqXHR,textStatus,errorwhold){alert(“errr:+errorwhold);})返回“错误:找不到"。看来我是对的,URL是错误的-但不确定它需要什么?很抱歉,Rich,我想我可能造成了一些混乱。select没有根据另一个中的选择填充。Perforce是我们的软件版本控制系统。我们有一个API,我在Perforce_sync_controller.rb中编写了一个函数,可以访问在API上,返回文件列表。我想调用该函数,作为呈现我的_PerformanceSyncPartial的一部分,当我在主页/主页中单击导航栏上的“Performance”选项卡时呈现该函数。(我将尝试在另一个注释中更好地解释问题!)没问题-期待新的评论!我认为问题在于/perforce\u sync/getPerforce(perforce\u sync是控制器,getPerforce是其中的一个操作)作为URL是错误的-但是如果我理解正确,上面代码中的“scope module”部分应该会解决这个问题(将controller#action替换为perforce#sync#当然是getPerforce!)……然而,rubymine现在抱怨起来——在“get”getPerforce“之后以及在“to:”之后都应该是:or;或行尾?希望我现在解释得更清楚一点?我的routes文件中有一个语法错误-需要一个
。让我看看你的评论,看看我是否能找到itrenderp4的底部(据我所知)自动转换为“renderp4.js.erb”——(现在要跑了,Rich-感谢你的努力,希望明天能赶上-再次感谢!)
$.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