热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

controller不响应Ajax-controllerdoesnotrespondtoAjax

IwouldliketouseAjaxtoaddamicroposttomyhomepagewithoutredirectassoonasitiscreate

I would like to use Ajax to add a micropost to my home page without redirect as soon as it is created. I added remote: true in the form:

我希望使用Ajax向我的主页添加微博,而不需要在创建后立即重定向。我在表格中添加了remote: true:

<%= form_for(@micropost, html: { multipart: true }, remote: true) do |f| %>

and edited the create action of the microposts controller as follows:

并对微贴子控制器的创建动作进行如下编辑:

def create
    @micropost = current_user.microposts.build(micropost_params)
    microposts_number = current_user.microposts.where("created_at >= ?", Time.zone.now.beginning_of_day).count
    if microposts_number <10
        if @micropost.save
            respond_to do |format|
                format.html do
                    flash[:success] = "Micropost created!"
                    redirect_to root_url
                end
                format.js
            end
        else
            @feed_items = []
            flash[:danger] = @micropost.errors.full_messages.join(', ')      
            render 'static_pages/home'
        end
    else
        flash[:danger] = "You have exceeded your daily share of microposts (10)."
        redirect_to root_url
    end
end

The microposts are shown in the home page as orded list of items, where @feed_items is a collection of microposts for current_user, thus belonging to Micropost:

微博在主页上显示为项目列表,其中@feed_items是current_user微博的集合,属于微博:

<% if @feed_items.any? %>
  
    <%= render @feed_items %>
<%= will_paginate @feed_items %> <% end %>

Therefore I created app/views/microposts/create.js.erb, using jQuery to select ol.microposts and function prepend() to add the newly created micropost to the page:

所以我创建了app /视图/ microposts / create.js。erb,使用jQuery选择ol。微贴子和函数prepend()将新创建的微贴子添加到页面:

$("ol.microposts").prepend('<%= escape_Javascript(render partial: @micropost) %>');

The partial _micropost.html.erb, used to build the li elements inside ol.microposts is (simplified) below:

分_micropost.html。erb,用于在ol内构建li元素。microposts如下(简体):

  • <%= link_to gravatar_for(micropost.user, size: 50), micropost.user %> <%= link_to micropost.user.name, micropost.user %> <%= micropost.content %> <%= image_tag micropost.picture.url if micropost.picture? %>
  • However the Micropost controller does not respond to the Ajax request but redirect to root_url, responding only to html (output from cloud9 server):

    但是,Micropost控制器不响应Ajax请求,而是重定向到root_url,只响应html (cloud9服务器的输出):

    Started POST "/microposts" for 82.56.61.198 at 2017-07-14 09:44:55 +0000
    Cannot render console from 82.56.61.198! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
    Processing by MicropostsController#create as HTML
    ...
    
    Started GET "/" for 82.56.61.198 at 2017-07-14 08:51:42 +0000
    Cannot render console from 82.56.61.198! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
    Processing by StaticPagesController#home as HTML
    

    I do not understand why the create action of the Micropost controller does not respond to js format. I tried to clone partial _micropost.html.erb and use the instance variable @micropost instead of the variable micropost of the iteration, but it did not work. There are no errors in the server log.

    我不明白为什么微邮报控制器的创建操作不响应js格式。我尝试克隆部分_micropost.html。erb并使用实例变量@micropost代替迭代的变量micropost,但它不起作用。服务器日志中没有错误。

    2 个解决方案

    #1


    2  

    Processing by MicropostsController#create as HTML

    通过MicropostsController#创建为HTML进行处理

    It is due to the limitation of AJAX. From the Reference

    这是由于AJAX的局限性。从参考

    Ajax uses something called an xmlhttprequest to send your data. Unfortunately, xmlhttprequests cannot post files

    Ajax使用xmlhttprequest来发送数据。不幸的是,xmlhttprequest不能发布文件

    That said, you cannot post files via AJAX. You may need some help with Remotipart or Jquery-File-Upload

    也就是说,不能通过AJAX发布文件。您可能需要一些帮助,包括Remotipart或Jquery-File-Upload。

    #2


    1  

    You only told the action to respond_to with format.js in your successful save path. You'll need to add a respond_to block with whatever you want to do for your js everywhere you render or redirect_to

    你只告诉动作respond_to与格式。在成功的保存路径中。您将需要在呈现或redirect_to的任何地方添加一个respond_to块来处理您的js


    推荐阅读
    • Java实战之电影在线观看系统的实现
      本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
    • baresip android编译、运行教程1语音通话
      本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
    • Voicewo在线语音识别转换jQuery插件的特点和示例
      本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
    • 后台获取视图对应的字符串
      1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
    • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
    • React基础篇一 - JSX语法扩展与使用
      本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
    • 从零基础到精通的前台学习路线
      随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
    • Node.js学习笔记(一)package.json及cnpm
      本文介绍了Node.js中包的概念,以及如何使用包来统一管理具有相互依赖关系的模块。同时还介绍了NPM(Node Package Manager)的基本介绍和使用方法,以及如何通过NPM下载第三方模块。 ... [详细]
    • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
    • 获取ul中第一个li元素的五种方法和多个ul中第一个li元素的四种方法
      本文介绍了获取ul中第一个li元素的五种方法和多个ul中第一个li元素的四种方法,包括使用jQuery的选择器和遍历方法。通过这些方法,可以方便地获取到所需的元素,并进行相应的操作。 ... [详细]
    • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
    • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
    • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
    • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
    • [大整数乘法] java代码实现
      本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
    author-avatar
    knight
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有