【问题标题】:How to retrieve a value from an AJAX call with Rails?如何使用 Rails 从 AJAX 调用中检索值?
【发布时间】:2014-09-10 10:19:39
【问题描述】:

我有这个方案: 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 %>');

只是一片空白……

但我不确定这里应该采用什么正确的工作流程(我只需要传递一种信息,例如“是”/“否”)。

谢谢大家!

【问题讨论】:

  • 你可以尝试用curl调试它

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


【解决方案1】:

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

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

正如另一个答案中所述,这不会在您的 console.log 或您的 javascript 中的任何地方产生 @aaa 值。这些变量在 server 端进行解释,但 javascript 仅在 client 端有效(除非您使用服务器端 javascript,但那是不同颜色的马) .这可能会造成混淆,因为我们在 Views 中使用 Ruby 变量,但 Views 在发送到客户端之前在服务器上进行解释。 Javascript 不是。

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

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

还有

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

【讨论】:

    【解决方案2】:

    嗯,这里发生了很多混乱:

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

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

    render :text => @aaa
    

    在 Rails 中,您不会在浏览器中获得名为 @aaa 的变量。

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

    【讨论】:

    • 好的,但是如何在 JS 的 console.log 中显示 Rails 操作中 :text 的值?
    • ajax 调用应该返回一个响应对象,其属性将是响应数据。
    猜你喜欢
    • 2018-04-27
    • 2014-02-15
    • 1970-01-01
    • 2013-02-11
    • 2015-07-18
    • 2018-10-29
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多