Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
如何使用AJAX将数据从ruby控制器发送到应用程序javascript?_Javascript_Jquery_Ruby On Rails_Ruby_Ajax - Fatal编程技术网

如何使用AJAX将数据从ruby控制器发送到应用程序javascript?

如何使用AJAX将数据从ruby控制器发送到应用程序javascript?,javascript,jquery,ruby-on-rails,ruby,ajax,Javascript,Jquery,Ruby On Rails,Ruby,Ajax,我的application.js中有一个AJAX调用,它向我的events_controller#check action发送3条数据: //application.js $(document).on('click', "#check-button", function(){ ... $.ajax({ url: '/events/check', data: {checkList: chec

我的application.js中有一个AJAX调用,它向我的events_controller#check action发送3条数据:

//application.js
    $(document).on('click', "#check-button", function(){

        ...

        $.ajax({
                url: '/events/check',
                data: {checkList: checkList , selected_date: selectedDate , length: length },

            }
        );

    });
#events_controller.rb
def check
    checkList = params[:checkList]
    selected_date = params[:selected_date]
    length = params[:length]

    busy_array = Array.new #this needs to be rendered in the view

    ...
    busy_array.push(user.id) #busy_array is a list of user ids from database


  end


#routes.rb
resources :events do
    get :check, on: :collection
  end
我的检查操作:

//application.js
    $(document).on('click', "#check-button", function(){

        ...

        $.ajax({
                url: '/events/check',
                data: {checkList: checkList , selected_date: selectedDate , length: length },

            }
        );

    });
#events_controller.rb
def check
    checkList = params[:checkList]
    selected_date = params[:selected_date]
    length = params[:length]

    busy_array = Array.new #this needs to be rendered in the view

    ...
    busy_array.push(user.id) #busy_array is a list of user ids from database


  end


#routes.rb
resources :events do
    get :check, on: :collection
  end
观点:

<button id="check-button" type="button">Check</button>

          <div class = "col-md-6" id="unavailable">
            <h2>Unavailable on this day:</h2>
            <ol id="unavailable-list">
              <li>THIS LIST SHOULD BE POPULATED BY BUSY_ARRAY</li>
            </ol>
      </div>
检查
当日不可用:
  • 此列表应由忙碌的\u数组填充
  • 现在,我需要将数据从
    events\u controller\check
    发送回视图,但我不知道如何将
    busy\u数组
    发送到
    events\new.html.erb


    感谢您的帮助,我是ruby/JS初学者

    对于ruby on Rails中的真实AJAX请求,您需要以JS格式发送check action的响应

    事件\u控制器.rb

    def check
        checkList = params[:checkList]
        selected_date = params[:selected_date]
        length = params[:length]
    
        @events = Event.where("checklist = ? and date = ?, checkList, selected_date).limit(length.to_i)
        ...
    
        respond_to do |format|
            format.js
        end
    end
    
    $("#unavailable-list").append('<%= escape_javascript( render :partial => "events/event", :collection => @events ) %>');
    
    <li><%= event.name %></li>
    
    现在,在您的视图中,您将看到check.js.erb,而不是check.html.erb。在这个Javascript文件中,您可以访问@variables并呈现部分或任何地方

    检查.js.erb

    def check
        checkList = params[:checkList]
        selected_date = params[:selected_date]
        length = params[:length]
    
        @events = Event.where("checklist = ? and date = ?, checkList, selected_date).limit(length.to_i)
        ...
    
        respond_to do |format|
            format.js
        end
    end
    
    $("#unavailable-list").append('<%= escape_javascript( render :partial => "events/event", :collection => @events ) %>');
    
    <li><%= event.name %></li>
    
    $(“#不可用列表”).append(“'events/event”“,:collection=>@events)%%>”;
    
    \u event.html.erb

    def check
        checkList = params[:checkList]
        selected_date = params[:selected_date]
        length = params[:length]
    
        @events = Event.where("checklist = ? and date = ?, checkList, selected_date).limit(length.to_i)
        ...
    
        respond_to do |format|
            format.js
        end
    end
    
    $("#unavailable-list").append('<%= escape_javascript( render :partial => "events/event", :collection => @events ) %>');
    
    <li><%= event.name %></li>
    
  • 我将busy_数组更改为events数组,因为我不知道什么是busy_数组,但您可以更改它

    这是AJAX请求的流程

    busy_array = Array.new #this needs to be rendered in the view
    
    如果必须在视图中提供,则需要定义一个
    @instance
    变量:

    def check
        checkList = params[:checkList]
        selected_date = params[:selected_date]
        length = params[:length]
    
        @busy_array = Array.new
        ...
        @busy_array.push(user.id) #busy_array is a list of user ids from database
    end
    
    每次调用
    控制器#操作
    时,
    操作
    中的数据/变量都由绑定

    视图中输出数据
    要求变量在类的整个实例中可用(而不仅仅是操作/函数)。因此,
    @busy\u数组


    修理
    视图
    事件控制器
    类实例的一部分,但不在
    检查
    方法的范围内。当您向Rails发送请求时,它使用
    控制器的一个实例来编译一组HTML以返回到您的浏览器

    例如,您可以将
    事件控制器
    流汇总如下:

    Request > Routing > EventsController.new(request).action > Returned HTML
    
    如果手动设置
    EventsController.new(请求)
    ,则会出现以下情况:

    @event = EventsController.new request
    
    @event.check    #-> "busy_array" locally scoped to this function
    @event.response #-> outputs view code.... @busy_array needs to be instance var
    
    如果您仔细阅读以下内容,您会更好地理解:


    好的,如果我做了$(“#不可用列表”).append(“”),它将使每个条目成为一个
  • 元素?如果@busy\u数组不是ActiveRecordRelation,则必须指定要渲染的部分,如
    render:partial=>“events/event”,:collection=>@busy\u数组
    。然后,在你的_event.html.erb中,你可以添加你的
  • 元素。你介意在你的答案中给我看一下吗?对不起,我不完全明白你的意思。我如何知道它是否是活动记录关系?我在controllerok中创建了它谢谢,我的busy_数组保存了数据库中的用户,因此如果我有(而不是_event.html.erb)一个_busy.html.erb,我可以呈现:partial=>“events/busy”,:collection=>@busy_数组,在_busy.html.erb中我可以写
  • ?谢谢,如果它不是post请求,而只是get请求,这有关系吗?一点也不重要,但您必须这样定义它。Ajax默认为
    POST