0

我试图让 autocomplete-rails.js 在带有 Ajax 的 Rails 中工作,

我有以下功能

<script type="text/javascript">
function reply_click(clicked_id)
{
 var x = "work";
 var y = "monday"
 alert(y)
 $.ajax({
  type    : 'POST',
  url     : "/whens", 
  data: { y : x},
success : function(data) {
            alert(data);          
          },  
});
}
</script>

我得到的问题是这会返回

"y"=>"work"

我希望它返回 y 的值

"monday"=>"work"

另外,如果我执行以下操作

<script type="text/javascript">
function reply_click(clicked_id)
{
 var x = "work";
 var y = "monday"
 var data = {};
 data[x] = y;
 $.ajax({
  type    : 'POST',
  url     : "/whens", 
  data,
success : function(data) {
            alert(data);          
          },  
});
}
</script>

它似乎返回我得到的问题是这返回

"term"=>"work"

知道如何让它返回 y 的内容

4

4 回答 4

2

如果一个键没有引号,那并不意味着它正在使用一个变量。

正如您所提到的,正确的做法是

var data = {};
data[y] = x;
$.ajax({
  type    : 'POST',
  url     : "/whens", 
  data    : data,
  success : function(data) {
            alert(data);          
          },  
 });

注意我把它改成了data[y] = x;

于 2012-08-30T12:47:24.870 回答
0

如果您想使用 ajax 加载一些数据,作为回报,这些数据可用于自动完成,然后通过 ajax 加载字符串数组。例如。在控制器做-

def get_characteristics
  unless ['Threads', 'Note'].include?(params[:name])
  @characteristics = Category.all.collect(&:characteristic)
  respond_to do |format|
    format.js{}
  end
end

在 get_characteristics.js.haml 中(例如在 haml 中)

var characteristics = #{@characteristics.to_json};
$('#characteristic').autocomplete( //the id of the text fields where u want autocomplete
  source: characteristics  //the array of string that u want for autocomplete
)

有关其他信息 http://jqueryui.com/demos/autocomplete/

于 2012-08-30T12:49:22.153 回答
0

变量作为关联数组中的索引 - Javascript

> var x = "work"
> var y = "monday"

> data= {}
{}
> data[x]=y
'monday'
> data
{ work: 'monday' }
于 2012-08-30T12:53:05.210 回答
0

你不能,第二个片段 ( data[y] =) 是唯一的方法。原因如下:

一个对象字面量,就像 JS 中的所有东西一样是一个对象(duh)并且具有属性。在全局范围内声明的所有变量都是全局(无名)对象的属性。您拥有的唯一(半)真实变量是您在闭包范围内声明的变量。所以从这个角度来看,在构造对象字面量时不应该引用属性是有道理的。
我什至会说,在对象字面量的声明中允许引用属性应该被认为是错误的,或者应该 - 至少 - 不鼓励。

JS 是一门美妙的语言,被一堆不一致、怪癖和坏主意所掩盖。可悲的是,如果你所知道的只是垃圾(几乎每个人都知道垃圾,很少有人知道实际的语言以及它的强大之处),那么一致且良好的稀有功能一开始看起来就像一个障碍。值得庆幸的是,你有大量的结构可以让你做你想做的事,并且做得很好。

在这种情况下,您可以将其全部写出来,data[a] = b; data[c] = d;... 或者您可以使用 power-constructor (google it)
另一个选项只是一个非常小的循环,假设您的数据对象将使用传递给函数的参数填充:

var data = {};
var argArray = Array.prototype.slice.apply(arguments,[0]);//returns array of arguments
var duo;
while(duo = argArray.splice(0,2))
{
    data[duo[0]] = duo[1];
    if (argArray.length < 2)
    {
        break;
    }
}

举个例子。我建议您(和其他所有人)在涉及对象时研究 crockfords 结构,以及函数调用在 JS 中的含义:不只是调用函数,call-object而是创建函数。

于 2012-08-30T12:59:21.113 回答