Javascript对象文字,POST问题
我试图让autocomplete-rails.js使用Ajax在rails中工作 我有以下功能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
<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;
}
}