热门标签 | 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


    推荐阅读
    • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
    • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
      文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
    • 本文介绍了如何在 Spring Boot 项目中使用 spring-boot-starter-quartz 组件实现定时任务,并将 cron 表达式存储在数据库中,以便动态调整任务执行频率。 ... [详细]
    • iOS开发 - 解决导航栏子视图损坏问题
      本文介绍了一个在Xcode 5.0.2和iOS 7模拟器环境下,使用Storyboard创建CoreData CRUD应用时遇到的导航栏子视图损坏问题及其解决方案。 ... [详细]
    • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
    • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
    • MicrosoftDeploymentToolkit2010部署培训实验手册V1.0目录实验环境说明3实验环境虚拟机使用信息3注意:4实验手册正文说 ... [详细]
    • Ext JS MVC系列一:环境搭建与框架概览
      本文主要介绍了如何在项目中使用Ext JS 4作为前端框架,并详细讲解了Ext JS 4的MVC开发模式。文章将从项目目录结构、相关CSS和JS文件的引用以及MVC框架的整体认识三个方面进行总结。 ... [详细]
    • 解决Bootstrap DataTable Ajax请求重复问题
      在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
    • 本文总结了在SQL Server数据库中编写和优化存储过程的经验和技巧,旨在帮助数据库开发人员提升存储过程的性能和可维护性。 ... [详细]
    • 本文介绍了如何在AX2012中通过自定义查询在数据网格视图中显示所有记录的方法。 ... [详细]
    • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
    • SQL 连接详解与应用
      本文详细介绍了 SQL 连接的概念、分类及实际应用,包括内连接、外连接、自连接等,并提供了丰富的示例代码。 ... [详细]
    • 深入解析 Lifecycle 的实现原理
      本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
    • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
    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社区 版权所有