我正试图让autocomplete-rails.js与Ajax、一起在rails中工作
i具有以下功能
<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 的内容吗
如果键没有引号,并不意味着它使用了变量。
正如你提到的,正确的方法是
var data = {};
data[y] = x;
$.ajax({
type : 'POST',
url : "/whens",
data : data,
success : function(data) {
alert(data);
},
});
注意,我将其更改为data[y] = x;
如果您想使用ajax加载一些数据,作为回报,这些数据可以用于自动完成,那么请使用ajax加载字符串数组。例如。控制器内do-
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/
变量作为关联数组中的索引-Javascript
> var x = "work"
> var y = "monday"
> data= {}
{}
> data[x]=y
'monday'
> data
{ work: 'monday' }
你不能,第二个片段(data[y] =
)是唯一的方法。原因如下:
像JS中的所有东西一样,对象文字是一个对象(duh),并且具有属性。全局作用域中声明的所有变量都是全局(无名称)对象的属性。您拥有的唯一(半)真变量是您在闭包范围中声明的变量。因此,从这个角度来看,在构造对象文字时不应该引用属性是理所当然的
我甚至认为,在对象文字的声明中允许引用属性是错误的,或者至少应该劝阻这样做。
JS是一种很棒的语言,被一堆不一致、怪癖和糟糕的想法所掩盖。可悲的是,如果你只知道gunk(几乎每个人都知道gunk,很少有人知道真正的语言以及它的力量在哪里),那么那些一致且良好的罕见功能一开始看起来像是一个障碍。值得庆幸的是,你有大量的构造,可以让你做你想做的事情,并且做得很好。
在这种情况下,您可以将其全部写出来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;
}
}
只是举个例子。当涉及到对象时,我建议你(和其他人)研究一下crackfords构造,以及函数调用在JS中的含义:函数不仅仅被调用,而是创建了call-object
。