Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.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请求未返回erb文件_Javascript_Ruby On Rails_Ajax - Fatal编程技术网

Javascript Ajax请求未返回erb文件

Javascript Ajax请求未返回erb文件,javascript,ruby-on-rails,ajax,Javascript,Ruby On Rails,Ajax,我的rails应用程序在ajax请求之后有很多客户端javascript回调,但是我无法通过route>controller>erb文件获得正确的流 下面是一个示例,从ajax请求开始: $(initElement).on("click", function(){ event.preventDefault(); var url = "http://localhost:3000/login"; $.ajax({ ur

我的rails应用程序在ajax请求之后有很多客户端javascript回调,但是我无法通过route>controller>erb文件获得正确的流

下面是一个示例,从ajax请求开始:

    $(initElement).on("click", function(){
        event.preventDefault();
        var url = "http://localhost:3000/login";

        $.ajax({
            url: url,
            method: "GET",
            dataType: "html"
        }).done(function(){
            console.log("*** ajax success T ***");
            displayObject.toggleSelectionLabels("show");
        }).fail(function(){
            console.log("*** ajax fail T ***");
        });
    });
routes.rb中的路由

get "/login" => "sessions#login"
会话控制器登录操作:

def login
    puts "******* login " + "*" * 21
end
我期望从服务器获得的login.html.erb文件:

<% @page_title = "UserAuth | Login" %>

<div class="form-column login">
    <h1>Log in</h1>
    <div class="tag-edits photo-form">
        <%= form_tag(:action => 'login_attempt') do %>
        ... edited out...
        <% end %>
    </div>
</div>

登录
“登录尝试”)执行%>
... 删掉。。。

ajax请求进入路由,返回为“成功”,并运行toggleSelectionLabels回调,但不显示erb内容。ajax会阻止rails中的正常处理吗?

您所说的正常处理是什么意思?如果要显示返回的html,可能需要执行以下操作

$(initElement).on("click", function(){
    event.preventDefault();
    var url = "http://localhost:3000/login";

    $.ajax({
        url: url,
        method: "GET",
        dataType: "html"
    }).success(function(response) {
      // response is your html, use it to inject it into the html
      // for Example
      $('.main-div').html(response);
    }).done(function(){
        console.log("*** ajax success T ***");
        displayObject.toggleSelectionLabels("show");
    }).fail(function(){
        console.log("*** ajax fail T ***");
    });
});

注意
success
回调。当服务器的响应具有httpStatus=200(确定)

感谢您的帮助时,将调用它。我现在得到了erb内容,但它周围有整个布局文件(而不是erb内容,我希望它能自己填充)。换句话说,整个页面会重新加载和填充。这个警告也是:“主线程上的同步XMLHttpRequest已被弃用…”就好像我正在发送2个请求。有什么想法吗?要删除布局,只需在控制器的
login
方法中添加
render layout:false
作为最后一行。至于警告,请看另一个SO。一旦你准备好回答,别忘了将答案标记为已接受。