0

这是我在加载页面时包含的代码:

<script type="text/javascript">
function test() {
    $.get('/login', function(data){
        alert("test");
        $('#flash_content').html("hi");
        }, 'script');}

    function test2(){
    var jqxhr = $.get("/login", function(data) {
            $('#flash_content').html(data);}, 'script')
            .success(function() { alert("second success"); })
            .error(function(request, status,error) { alert(error); })
            .complete(function() { alert("complete"); });}

    $(document).ready(function() {
    $("#login").click(function(event){
     event.preventDefault(); // Prevent link from following its href
    test2();
    });});
    </script>

当我调用 test2() 时,我可以在我的 rails 服务器日志中看到它呈现了它应该呈现的视图,并且在 firebug 中我看到我的 ajax get 响应确实是我想要覆盖到页面上的表单,但是什么也没有页面实际上发生了变化。我已经用字符串“hi”替换了“Data”,这确实被放入了页面中。如您所见,弹出一个警报并告诉我:

SyntaxError: missing ; before statement

这是我用于登录的控制器方法:

@user = User.new
respond_to do |format|
    format.html { }
    format.js  {render :layout => false }
    format.xml  { head :ok }
  end

以及应该呈现的视图:

    <%= form_tag user_sessions_path, :method => :post do  %>
  <div class="field">
    <%= label_tag :username %><br />
    <%= text_field_tag :username %>
  </div>
  <div class="field">
    <%= label_tag :password %><br />
    <%= password_field_tag :password %></br>
    Remember me : <%= check_box_tag :remember %>
  </div>

  <div class="actions">
    <%= submit_tag "Login" %>
  </div>
<% end %>

我已经在这几个小时了,所以也许我没有看到明显的东西:(谢谢。

4

1 回答 1

1

你告诉 jquery 返回的是 javascript (最后一个参数$.get)。这告诉 jquery,当它得到你的响应时,它应该评估它。

但是,您的响应是 html - 尝试将其评估为 javascript 没有意义。您应该忽略该参数(让 jquery 猜测)或将其设置为“html”。

Rails 仍会将该format.js块用于 xhr 请求,尽管我相信您需要将它放在format.html版本之前。

于 2012-08-19T07:48:03.253 回答