Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
Ruby on rails Rails远程表单成功,但未返回任何数据_Ruby On Rails_Ajax_Coffeescript_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails Rails远程表单成功,但未返回任何数据

Ruby on rails Rails远程表单成功,但未返回任何数据,ruby-on-rails,ajax,coffeescript,ruby-on-rails-5,Ruby On Rails,Ajax,Coffeescript,Ruby On Rails 5,我有一个简单的远程表单,带有一个输入和发送按钮。 我为ajax创建了侦听器:成功: $ -> $form = $('#post-form') $form.on 'ajax:success', (e, data, status, xhr) -> console.log e console.log data console.log status console.log xhr 和我的控制器: def create @post = P

我有一个简单的远程表单,带有一个输入和发送按钮。 我为ajax创建了侦听器:成功:

$ ->
  $form = $('#post-form')

  $form.on 'ajax:success', (e, data, status, xhr) ->
    console.log e
    console.log data
    console.log status
    console.log xhr
和我的控制器:

  def create
    @post = Post.new(post_params)
    @post.user_id = 3

    if @post.save
      render partial: 'posts/view', locals: { post: @post }, status: :ok
    else
      render json: @post.errors, status: :unprocessable_entity
    end
  end
我看到请求在后端传递,返回状态200:

Rendered posts/_view.html.erb (3.0ms) [cache miss]
Completed 200 OK in 480ms (Views: 466.6ms | ActiveRecord: 7.0ms)
但在devtools中,我看到:


我做错了什么?

我不确定创建帖子后您想对数据做什么,但为了接收通过JSON发送到操作的数据,您必须从该操作返回JSON,如下所示:

def create
  @post = Post.new(post_params)
  @post.user_id = 3

  respond_to do |format|
    if @post.save
      format.html { render partial: 'posts/view', locals: { post: @post } }
      format.json { render json: @post, status: :created }
    else
     format.html { render :new } # assuming you have a view file named "views/posts/new.html.erb"
      format.json { render json: @post.errors, status: :unprocessable_entity }
    end
  end
end

这样,如果请求是JSON,您就可以处理请求,如果请求是纯HTML,您就可以处理请求。

我过去使用的技术是将DOM的a部分替换为AJAX请求的一部分,即

def create
    @post = Post.new(post_params)
    @post.user_id = 3)
    respond_to do |format|
        format.js
    end
end
在/views/posts/create.js.erb中

$("#new_item").html("<%= escape_javascript(render partial: 'posts/view', locals: { post: @post } ) %>"); 
$(“#新项目”).html(“”);
看看。

快速TL;博士:

假设您使用上述代码,这就是您要查找的json响应:

e.detail[0]
这也让我有点恼火。通过询问返回的一个对象,我找到了我的答案——结果体在返回的事件中可用。我的Rails应用程序没有使用jQuery,因此生成的事件对象是一个
ajax:success
result

结果有一个名为
detail
的字段,它(在我的例子中)包含三项:来自被调用请求的响应体的数据(我相信这就是您要查找的)、字符串
“OK”
和发出调用的
XMLHttpRequest

因此,在您上面的
表单中。在
回调中,如果您询问
e.details[0]
,我想您会找到json数据(而且,回调中的其他参数也是不必要的)


我的假设是,在某种程度上,远程调用的回调逻辑简化为包含所有代码的单个参数。看起来这是在删除对UJS:.的jQuery的依赖关系时发生的。

这不是我问题的答案。我希望在后端呈现html并将其传递到前端,而不管请求来自何处。是否无法从后端传递呈现的html?我不想让js知道视图是如何呈现的,也不想记住我是如何委托它的。据我所知,这是做您所描述的事情的首选且优雅的方式。这实际上是从服务器端传递呈现的HTML,它只是将其包装在一段Javascript中,以替换页面的相应部分。如果不想重新加载页面,则需要以这种或那种方式执行此操作。在前端使用手卷JS做这件事会很麻烦,IMHO。如果你不想使用AJAX,你可以做一些像重定向到@post这样的事情来路由回资源。我也遇到了同样的问题,你找到解决方案了吗?@DeepanshuGoyal是的,我停止使用rails了。