我试图使用Ajax使用Rails工作的autocomplete-rails.js,
我有以下功能
<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的内容
答案 0 :(得分:2)
如果某个键没有引号,那并不意味着它使用了一个变量。
正如你所提到的那样,正确的做法是
var data = {};
data[y] = x;
$.ajax({
type : 'POST',
url : "/whens",
data : data,
success : function(data) {
alert(data);
},
});
注意我已将其更改为data[y] = x;
答案 1 :(得分:0)
如果你想使用ajax加载一些数据,而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
)
答案 2 :(得分:0)
variable as index in an associative array - Javascript
> var x = "work"
> var y = "monday"
> data= {}
{}
> data[x]=y
'monday'
> data
{ work: 'monday' }
答案 3 :(得分:0)
你不能,第二个片段(data[y] =
)是唯一的方法。原因如下:
对象文字,就像JS中的所有东西一样,是一个对象( duh )并且具有属性。在全局范围内声明的所有变量都是全局(无名)对象的属性。您拥有的唯一(半)真实变量是您在闭包范围中声明的变量。因此,从这个角度来看,可以理解在构造对象文字时不应引用属性。我甚至可以说,在对象文字的声明中允许引用的属性应该被认为是错误的,或者它应该 - 至少是灰心的。
JS是一种很棒的语言,被一堆不一致,怪癖和糟糕的想法所掩盖。可悲的是,如果你所知道的只是垃圾(几乎每个人都知道那些垃圾,很少有人知道实际的语言以及它获得它的力量),那些罕见的特征是一致的,并且 good 起初看起来像是一个障碍。值得庆幸的是,你有大量的结构可以让你做你想做的事情,并做得很好。在这种情况下,您可以将其全部写出来data[a] = b; data[c] = d;...
或您可以使用电源构造函数(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
。