【问题标题】:Ajax request not returning erb fileAjax请求不返回erb文件
【发布时间】:2015-10-18 20:37:25
【问题描述】:

我的 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 内的正常处理吗?

【问题讨论】:

    标签: javascript ruby-on-rails ajax


    【解决方案1】:

    正常处理是什么意思?如果您想显示返回的 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 (OK) 时调用它

    【讨论】:

    • 感谢您的帮助。我现在得到了 erb 内容,但它附带了围绕它的整个布局文件(而不是仅 erb 内容,我希望它自己填充 。)换句话说,整个页面重新加载并填充 yield .这个警告也是:“主线程上的同步 XMLHttpRequest 已被弃用......”好像我正在发送 2 个请求。有什么想法吗?
    • 要删除布局,您只需在控制器的login 方法中添加render layout: false 作为最后一行。至于警告,请查看其他 SO post。准备好后,别忘了将答案标记为已接受。
    猜你喜欢
    • 1970-01-01
    • 2013-04-23
    • 2011-10-19
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2015-05-24
    相关资源
    最近更新 更多