如何使用Rails从AJAX调用中检索值?

时间:2014-07-19 10:13:03

标签: javascript jquery ruby-on-rails ajax render

我有这个计划: JS:

jQuery.validator.addMethod(
        "check_membership", 
        function() {
            console.log('A');
            $.ajax({
                type: "POST",
                url: "/subscriptions/check_validity",
                dataType:"JSON",
                data: {coupon: "12345"},
            });
            console.log('<%= @aaa %>');
        },
        "mmmmm"
    );

和Rails行动:

  def check_validity
    @aaa = 'xxx'
    respond_to do |format|
      format.js { render :text => @aaa }
    end
  end

我的目标是在Javascript中显示来自Rails的值 - @aaa,但输出

console.log('<%= @aaa %>');

只是一个空白......

但我不确定这里应该采用什么样的工作流程(我需要传递一种信息,例如&#34;是&#34; /&#34;不&#34;)。

谢谢你们!

2 个答案:

答案 0 :(得分:1)

Ajax将数据的params变量发送到控制器,就像新记录的表单一样。在您的示例中,要检索优惠券值,您将params传递给您在ajax调用中建立的密钥:

def check_validity
  value = params[:coupon] # returns "12345"
  ...
end

如另一个答案所述,这不会在您的console.log或javascript中的任何位置产生@aaa值。这些变量在服务器方面进行解释,但javascript仅适用于客户端方面(除非您使用服务器端javascript,但那是&#39; sa马不同的颜色)。这可能会让人感到困惑,因为我们在视图中使用Ruby变量,但在将视图发送到客户端之前,会在服务器上解释视图。 Javascript不是。

将变量传递给Rails后,通过params值,您需要将任何新信息发送回客户端,这看起来像是您尝试使用:text => @aaa 。有很多方法可以解决这个问题,但你可以从Railscast开始:

http://railscasts.com/episodes/324-passing-data-to-javascript

以及

http://railscasts.com/episodes/136-jquery-ajax-revised

答案 1 :(得分:0)

嗯,这里有很多混乱:

console.log('<%= @aaa %>');

混合服务器端和客户端的东西。如果你

render :text => @aaa
在rails中,你不会在浏览器中获得名为@aaa的变量。

我建议将json渲染到浏览器......