我正在从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后端在该页面中呈现响应,就像处理您可能访问的任何其他网页一样。我不确定如何将成功/失败状态返回给调用函数。