是否有可能从Rails返回值到客户端javascript ?



我正在从Python后端迁移到Ruby on Rails,一些遗留的客户端js代码看起来像这样:

$http.post(url, data, config).
    success(function(data, status, headers, config) {
        if(data == 0) {
            $scope.subscribed = 'true'
        } else {
            alert("There is an issue with that email address.")
            return
        }
    }).
        error(function(data, status, headers, config) {
        return
    });

我现在让后端做它应该做的事情,但除非我使用flash,否则我不确定如何将成功/失败状态返回给调用函数。我想只是返回一个整数值,所以代码可以继续工作。这可能吗?或者我需要重写前端来使用flash散列吗?

编辑:为了记录,这是处理这个的后端代码看起来像。

路线:

Rails.application.routes.draw do
  root to: 'static_pages#index'
  resources :subscriptions, only: [:create]
  match '/subscribe', to: 'subscriptions#subscribe', via: :post
end

控制器:

class SubscriptionsController < ApplicationController
  protect_from_forgery
  returnVal = -1
  def subscribe  
    begin
      # Do some stuff that could cause an exception>
      flash[:success] = "Subscribed successfully"
      logger.debug flash[:success]
      returnVal = 0
    rescue <Some exception>
      flash[:error] = "Error"
    rescue <Another exception>
      flash[:error] = "Error"
    end
    if (!flash[:error].blank?)
      logger.debug flash[:error]
    end
    render 'static_pages/index'
    return returnVal
  end
end

除了"return"部分外,一切似乎都很好。

在Rails控制器中,您不需要将想要发送到浏览器的文本return。相反,你要render它。

例如:

render plain: returnVal

(来自Rails布局和渲染指南)

另外,您可能不需要flash散列。flash用于临时存储会话数据并在下一个请求中检索它。因为您在这里只发出一个请求,所以flash是不必要的。

或者我需要重写前端来使用flash散列吗?

前端不能使用flash散列。这只能在服务器上访问。

我不确定如何将成功/失败状态返回给调用函数。

你使用这样的短语让我怀疑你是否真的明白这里发生了什么。你不能从客户端直接调用服务器端函数。您所能做的就是发出HTTP请求,就像浏览器访问页面时所做的那样。您的代码只是告诉浏览器下载一个页面,Rails后端在该页面中呈现响应,就像处理您可能访问的任何其他网页一样。

最新更新