是否可以将值从Rails返回到客户端javascript?

时间:2014-06-11 15:36:24

标签: javascript ruby-on-rails ruby ruby-on-rails-4

我正在从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
    });

我现在有后端做它应该在这里做的事情,但除非我使用闪光灯,否则我不确定如何将成功/失败状态返回给调用函数。我只想返回一个整数值,以便代码可以继续按原样运行。那可能吗?或者我是否需要重写前端以使用闪存哈希?

编辑:对于记录,这就是处理它的后端代码的样子。

路线:

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

除了&#34;返回&#34;所有似乎都工作正常。一部分。

1 个答案:

答案 0 :(得分:2)

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

例如:

render plain: returnVal

(来自the Rails Guide on layouts and rendering

此外,您可能不需要Flash哈希。 flash用于临时存储会话数据并在下一个请求中检索它。由于您只在此处发出一个请求,因此不需要flash

  

或者我是否需要重写前端以使用闪存哈希?

前端无法使用Flash哈希。这只能在服务器上访问。

  

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

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