Javascript对象文字,POST问题

Javascript对象文字,POST问题,javascript,jquery,ruby,ajax,ruby-on-rails-3,Javascript,Jquery,Ruby,Ajax,Ruby On Rails 3,我试图让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 : fun

我试图让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的值

"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>

如果一个键没有引号,我怎么能让它返回y的内容呢?这并不意味着它使用了一个变量

正如你所说,正确的做法是

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

注:我将其更改为
data[y]=x

如果您想使用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中)

有关其他信息


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

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

JS是一种很棒的语言,被一堆不一致、怪癖和糟糕的想法所掩盖。可悲的是,如果你所知道的都是gunk(几乎每个人都知道gunk,很少有人知道真正的语言以及它的力量来自哪里),那么这些罕见的、一致且良好的特性一开始看起来就像一个障碍。谢天谢地,您拥有大量的构造,使您能够做您想做的事情,并且做得很好

在这种情况下,您可以将其全部写出
data[a]=b;数据[c]=d或者您可以使用power构造函数(谷歌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;
    }
}
var data={};
var argArray=Array.prototype.slice.apply(参数[0])//返回参数数组
瓦多;
while(duo=argArray.splice(0,2))
{
数据[duo[0]]=duo[1];
if(argArray.length<2)
{
打破
}
}

举个例子。我建议您(和其他人)在对象方面研究crockfords构造,以及函数调用在JS中的含义:函数不仅仅是被调用的,还创建了一个调用对象

我一直认为object literal表示法允许不带引号的键是愚蠢的。那么为什么不使用
{monday:“work”}
呢?你不应该有
数据[y]=x,而不是
数据[x]=y?当
/when
服务做什么?
def get_characteristics
  unless ['Threads', 'Note'].include?(params[:name])
  @characteristics = Category.all.collect(&:characteristic)
  respond_to do |format|
    format.js{}
  end
end
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
)
> var x = "work"
> var y = "monday"

> data= {}
{}
> data[x]=y
'monday'
> data
{ work: 'monday' }
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;
    }
}