3

我的application.js文件中有这个 Ajax 函数:

$("#project_person_id").change(function() {
    $.ajax({
        url: '/projects/get_invoice_types',
        data: 'person_id=' + this.value,
        dataType: 'script'
    })
});

是否可以在该函数中使用语言环境?

当我将第 3 行更改为此:

url: '/de/projects/get_invoice_types',

我得到了想要的结果(即德语输出)。

但我当然想动态设置它。如何才能做到这一点?

谢谢你的帮助。

4

3 回答 3

4

你可以在任何你喜欢的地方动态设置它,即

var locale = "de"; // set it dynamically

并将其用作全局,就像这样

$("#project_person_id").change(function() {
    $.ajax({
        url: "/"+locale+'/projects/get_invoice_types', // use it
        data: 'person_id=' + this.value,
        dataType: 'script'
    })
});

一个更优雅的为什么将它设置为body标签<body data-locale="de">或HTML head的数据属性<html lang="de">,并使用函数拉取它

function locale() { return $("body").data("locale") }或者 function locale() { return $("html").attr("lang") }然后像这样检索它:

$("#project_person_id").change(function() {
    $.ajax({
        url: "/"+locale()+'/projects/get_invoice_types', // use it
        data: 'person_id=' + this.value,
        dataType: 'script'
    })
});

当然还有其他选择,这些看起来很简单。

于 2013-05-25T19:43:32.267 回答
0

我通过修改 $.get 和 $.post jQuery 的函数解决了这个问题。

在我的情况下,语言环境是 url 中的一个参数,但它也可以像Sagish那样注入

(function ($) {
  var oPost = jQuery.post;
  var oGet = jQuery.get;

  jQuery.post=function(url , data , success , dataType ){
    if (typeof data === "undefined") {
      data={};
    }
    data=add_locale_to_url(data);
    return oPost.apply(this,[url , data , success , dataType]);
  }  

  jQuery.get=function(url , data , success , dataType ){    
    if (typeof data === "undefined") {
      data={};
    }
    data=add_locale_to_url(data);    
    return oGet.apply(this,[url , data , success , dataType]);
  } 

})(jQuery);

当我调用 $.get 或 $.post 时,语言环境会自动添加到 URL:

...   
var remote_search=$.get("/expenses/search_users/"+$(this).val());

    remote_search(function( data ) {
          $("#processing").hide();
          alert( "Usuari inexistent");
          obj_error.val("");
});
...
于 2015-12-29T10:12:32.953 回答
0

我通过向我的 erb 模板添加数据属性解决了这个问题。

<button type="button" class="btn btn-success" id="save-job-position-btn" data-locale="<%= params[:locale] %>"><%= t("save") %></button>
$( "#save-job-position-btn" ).click(function() {
  var locale = $(this).data("locale");
}
于 2020-06-29T08:58:19.927 回答