【问题标题】:How can I access ruby/rails app variables through an external JS file如何通过外部 JS 文件访问 ruby​​/rails 应用程序变量
【发布时间】:2013-07-28 00:58:30
【问题描述】:

我正在构建一个用于跟踪付费搜索广告效果的内部应用程序。

假设我有几个不同的付费搜索广告系列,它们将流量引导到不同的网站(我们称它们为“目标网站”)。当用户点击付费广告并登陆目标网站时,会使用 JS 设置 cookie。然后,我查找该 cookie 的存在,如果已设置(意味着它们必须来自 adwords),我将页面上的默认电话号码换成跟踪号码。

我通过从目标站点引用我的 rails 应用程序中的 JS 文件来完成此操作,如下所示:

<script src="http://www.myapp.com/assets/application.js" type="text/javascript"></script>

JS脚本的适用内容:

if(window.location.href.indexOf("gclid") > -1) {
       document.cookie = "ppc=adwords; path=/";
    }


function getCookie(name) {
    var nameEQ = name + '=';
    var ca = document.cookie.split(';');

    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') {
            c = c.substring(1, c.length);
        }

        if (c.indexOf(nameEQ) == 0) {
            return unescape(c.substring(nameEQ.length, c.length));
        }
    }

    return "";
}


var value = getCookie('ppc'); 
if (value != '') { 
  // this user has the cookie, which means they came from gclid
    alert("this user has the ppc cookie!");

    var testswap = function(){
        var swap = document.getElementById("test").textContent;
        document.getElementById("test").textContent = "New Number Insert";
    }
    document.addEventListener("DOMContentLoaded", testswap);

} else { 

    alert("user doesn't have cookie");
  // this user lacks the cookie, which means they came from somewhere else
}

我将每个帐户的付费搜索号码存储在应用程序的数据库中。访问它的最佳方法是什么,以便我可以从上面的脚本中交换这一行中的数字

document.getElementById("test").textContent = "New Number Insert from app's database";

我以为我已经通过使用gon gem 解决了这个问题,但很快意识到它无法访问目标站点上控制器中设置的变量(我知道这听起来很明显,但我想也许一旦目标site ref JS文件,JS文件可以访问这些)。 AJAX 是要走的路吗?

免责声明:在编程方面我还是个新手,所以如果这个纲要可以更简洁,我深表歉意。另外,我知道这可能不是最有效的代码,所以如果这使它解释起来有点复杂,我很抱歉。

任何帮助将不胜感激!

【问题讨论】:

    标签: javascript ruby-on-rails ajax


    【解决方案1】:

    您可以创建另一个控制器,通过 cookie(或与用户号码相关的任何其他值)搜索用户号码,然后通过 ajax 获取它。

    注意:未经测试的代码

    控制器(也配置你的路由):

     class UsersController < ApplicationController
       def get_number
         @cookie = params[:cookie]
         @user = User.where(cookie: @cookie).first
         render json: @user.to_json
       end 
     end
    

    然后在你的application.js

      $.get("<your controller route>",{cookie: value},function(data){
          var testswap = function(){
              var swap = document.getElementById("test").textContent;
              document.getElementById("test").textContent = data.number;
          }
      });
    

    【讨论】:

    • 感谢王牌的回复。如果我错了,请纠正我,但是您的控制器代码假定访问目标站点的用户也在访问应用程序(他们需要这样做才能获取该 cookie “params [:cookie]”)对吗?访问目标站点的用户,从来没有来到实际的应用程序。我需要 javascript 能够从数据库中获取一个数字,以便我可以与目标站点上的数字交换。
    • 您对应用程序的 ajax 请求怎么样(请记住,应该有一个知道谁在通过的密钥,否则会构成安全威胁)?而不是:$.get(""),它变成 $.get("yourapp.com/your_controller_route", {cookie...)
    猜你喜欢
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 2017-04-22
    • 1970-01-01
    • 2013-07-25
    相关资源
    最近更新 更多