Javascript rails中的ajax控制

Javascript rails中的ajax控制,javascript,jquery,ruby-on-rails,ajax,Javascript,Jquery,Ruby On Rails,Ajax,嘿,伙计们,我需要知道一些问题的答案首先当我不从控制器返回任何内容时,我如何处理ajax调用,因为它总是要求我提供被调用函数的视图,但既然我使用ajax调用了该函数,它又如何拥有视图(我在ROR(ruby on rails)中使用它) bookmark.html.erb <div class="row"> <div id="page-wrapper-lbms" class="small-12 medium-12 large-12 columns dashboard-

嘿,伙计们,我需要知道一些问题的答案首先当我不从控制器返回任何内容时,我如何处理ajax调用,因为它总是要求我提供被调用函数的视图,但既然我使用ajax调用了该函数,它又如何拥有视图(我在ROR(ruby on rails)中使用它)

bookmark.html.erb

<div class="row">
      <div id="page-wrapper-lbms" class="small-12 medium-12 large-12 columns dashboard-page">

        <input type="hidden" id="bookmarked_against_req_id" value=<%= @data2%> />
        <%
        if @requests != nil
         @requests.each.with_index do |request,index| 

          if request != nil
          %>
      <header>
        <div style="text-align:center">
          <a href="#" onclick="ajax_bookmark('<%= request.id %>' , '<%=@request_id%>')" ><span class="fa fa-bookmark"></span></a>
        </div> 
        <h2 style="text-align:center"><%= request.title  %></h2>

        <div style="text-align:center">
          <h6 style="color:#aaaaaa"><strong><%= request.is_service%></strong></h6>
        </div>
      </header>
        <div class ="row">
        <div class="small-12 medium-12 large-8 columns">  

        <div id="request-content-lbms" class="panel">
          <p>
            <%= request.description%>
          </p>
        </div>
        <div id="list-request-cat-lbms">
          <span class="fa fa-tag"></span>
          <% if @tag[index] != nil
              @tag[index].each do |cat| %>
                 <%= cat.title %> 
             <%end%>
          <%end%>
        </div>
      </div>
      <aside class="small-12 medium-12 large-4 columns" style="padding-left:10%"> 

          <h3 ><strong>Syed Muhammad Ali Gardezi</strong></h3>
          <time><%= request.created_at %></time><br />
          <%end%>
          <button class="button tiny">Schedule Meeting</button>
      </aside>
    </div>
   </div>

  <%end%>
  <%end%>




  <script>
    function ajax_bookmark(abc , cde){

      var cde = $('#bookmarked_against_req_id').val();
      $.ajax({
    type: "GET",
    url: 'bookmark_request',
    data: {
      d:abc,
      d1:cde
    },
        error:function(){

    },
    dataType: 'json',
    //beforeSend:function(){},
    //complete:function(o,s){},
    success:function(data){
      location.href ="/requests/bookmark"
    },
    type: 'get'
  });
    }
  </script



Syed Muhammad Ali Gardezi
计划会议 函数ajax_书签(abc、cde){ var cde=$(“#根据_-req_-id”为_添加书签”).val(); $.ajax({ 键入:“获取”, url:“书签请求”, 数据:{ d:abc, d1:cde }, 错误:函数(){ }, 数据类型:“json”, //beforeSend:function(){}, //完成:函数(o,s){}, 成功:功能(数据){ location.href=“/requests/bookmark” }, 键入:“获取” }); }
我试着回答你:

第一名: 如果您有针对ajax调用的特殊操作,您只需要:

def custom_action
end
如果使用ajax调用,这将呈现
custom_action.js.erb
,例如带有
remote:true的表单

如果调用CRUD操作之一并需要能够响应多种格式:

def show
  @book = Book.find(params[:id]) 
  respond_to do |format|
    format.html # will render show.html.erb
    format.js # will render show.js.erb
  end
end
如果在视图中放置链接:

link_to('Remote Ajax Call', book_path(@book), remote: true)
<%= hidden_field_tag :bookmarked_against_req_id, value: @data2 %> 
  <% if @requests != nil %>
    <% @requests.each.with_index do |request,index| %> 
      <% if request.present? %>
        <%= link_to 'Bookmark it', bookmark_request_path(request), remote: true %>
        <%= request.title  %>
        <%= request.is_service%>
        <%= request.description%>
        <% if @tag[index].present? %>
          <% @tag[index].each do |cat| %>
            <%= cat.title %> 
          <%end%>
        <%end%>
        <%= request.created_at %>
       <%end%> 
  <%end%>
 <%end%>
此链接将调用方法show和render as
:js
。 它将查找
app/views/books/show.js.erb
,它可能看起来像:

<% if @book.present? %>
  $('#book-title').html("<%=@book.title%>");
<%end%>
秒:

我不明白你的意思

…需要归还一些东西

你能举个例子吗

希望这能对你有所帮助

编辑: 这是我试图了解您想要做的事情: 在你看来:

link_to('Remote Ajax Call', book_path(@book), remote: true)
<%= hidden_field_tag :bookmarked_against_req_id, value: @data2 %> 
  <% if @requests != nil %>
    <% @requests.each.with_index do |request,index| %> 
      <% if request.present? %>
        <%= link_to 'Bookmark it', bookmark_request_path(request), remote: true %>
        <%= request.title  %>
        <%= request.is_service%>
        <%= request.description%>
        <% if @tag[index].present? %>
          <% @tag[index].each do |cat| %>
            <%= cat.title %> 
          <%end%>
        <%end%>
        <%= request.created_at %>
       <%end%> 
  <%end%>
 <%end%>
当您的操作
书签请求
完成时。如果请求是AJAX,您将呈现JavaScript文件
bookmark\u request.js.erb

在这里,您应该将脚本放在视图中:

link_to('Remote Ajax Call', book_path(@book), remote: true)
<%= hidden_field_tag :bookmarked_against_req_id, value: @data2 %> 
  <% if @requests != nil %>
    <% @requests.each.with_index do |request,index| %> 
      <% if request.present? %>
        <%= link_to 'Bookmark it', bookmark_request_path(request), remote: true %>
        <%= request.title  %>
        <%= request.is_service%>
        <%= request.description%>
        <% if @tag[index].present? %>
          <% @tag[index].each do |cat| %>
            <%= cat.title %> 
          <%end%>
        <%end%>
        <%= request.created_at %>
       <%end%> 
  <%end%>
 <%end%>
如果资源已保存,则应使用JavaScript来呈现“成功”,如果失败,则应使用其他方式


flash[:notice]=“请求已成功添加书签。”
不会被您的AJAX请求理解。

您可能想看看rails指南-它们是一个很好的基础知识来源:。有关基于请求格式(ajax与html)返回不同响应的信息,请参见上面的和@davidwessman的回答

通常,您将从ajax请求返回JSON数据;例如,在控制器中,您可能会说

respond_to do |format|
  format.js {render json: @my_ojects.to_json} 
end
请注意,呈现json有几种方法,包括gems之类的。如果您像那样返回json,则不需要呈现rails视图(除非您使用视图来构建json,就像rabl那样,或者davidwessman用js.erb回答时暗示的那样)


希望这会有所帮助。

这个format.html会让我了解ajax的成功功能吗。因为我需要在那里做一些事情,在第二个例子中,我需要返回一个字符串或一个对象,比如“great”或一个object,比如books,我添加了一个关于如何使用ajax响应的示例。如果我理解正确,我认为这也是您在第二部分中想要的。问题是我需要在ajax成功函数中首先返回返回值,第二件事是当我不返回任何内容时,它开始给我错误,即应用程序找不到视图。在本例中,我只需要返回ajax成功函数,以确定如果您在操作中没有做任何事情,那么为什么必须使用ajax?这看起来像是一个普通的GETwell,这是我们教授的要求,所以我需要这样做。因为我需要以这种格式做一些事情,所以我仍然有一个问题,我如何才能进入ajax的成功函数。html将带我到与我的函数对应的视图。我有一个函数,比如书签请求。我只是更新了一些东西,然后它需要返回bookmark.html.erb,我需要从一个函数中呈现一个json,比如在一个视图中呈现b,比如说a.html.erb,既然simple render json:---不会让我回到ajax的成功函数,我该怎么做呢