【问题标题】:Simply returning success or failure from ajax call in rails简单地从rails中的ajax调用返回成功或失败
【发布时间】:2010-09-25 05:56:59
【问题描述】:

我有一个调用 rails 的小 ajax 调用:

    $.ajax({
        type: "POST",
        url: '...',
        data: ({    ...
                }),
        success:    function(response, status) {
                    console.log(status);
        }
     });

在 Rails 控制器中,我只是从数据库中删除一个条目,我只想返回它是否成功。最好的方法是什么?

我应该只在respond_to 中返回JSON 吗?如果是这样,您究竟希望它包含什么?

【问题讨论】:

    标签: ruby-on-rails ajax json


    【解决方案1】:

    以这种方式表示成功的最佳方法是将以下内容放入您的控制器中...

    def destroy
      # ... your code ...
      respond_to do |format|
        format.json { head :ok }
      end
    end
    

    【讨论】:

    • 谢谢!作为记录,对于失败,它可能类似于:format.json { render :json => @obj.errors, :status => :unprocessable_entity }
    • 我读到只返回 ok 可能行不通:stackoverflow.com/questions/4791499/…
    • 我使用的是format.json { head :no_content },因为我不想发送任何数据。但是浏览器在ajax成功后试图重定向到一个url,这是出乎意料的。我用format.json { head :ok } 替换了它,不必要的重定向消失了。
    • 这对我不起作用。我最终不得不用状态码渲染 nil:render json: nil, status: :ok
    【解决方案2】:

    试试这个对我有用

    def destroy 
      ...        
      render json: {}, status: 200
    end
    

    【讨论】:

      【解决方案3】:

      我发现了这种更短的方法来完成这项工作:

      def destroy
        # ... your code ...
        head :ok # this will return HTTP 200 OK to jQuery!
      end
      

      【讨论】:

      • 这会向 jQuery 返回一个 200 以及响应中的一个空格。 jQuery 不会将此解释为成功。所以它会返回成功但不会调用成功回调。
      • 哇,这实际上已被修补。我的立场是正确的!
      【解决方案4】:

      当您执行查询时,它可能会返回一些代码,表明它已成功执行以确认该行已被删除。因此,您可以返回它以确保查询也与 ajax 调用一起成功执行。

      【讨论】:

      • 对,我知道我的查询是否成功,但是您建议如何返回?例如:format.json { "false" } 或 render :nothing => true,或 ..?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 2021-10-12
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多