0

RailswithAjaxで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の内容を返す方法を教えてください

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

できません。2番目のスニペット(data[y] =)が唯一の方法です。理由は次のとおりです。

JSのすべてのものと同様に、オブジェクトリテラルはオブジェクト(duh)であり、プロパティがあります。グローバルスコープで宣言されたすべての変数は、グローバル(名前のない)オブジェクトのプロパティです。あなたが持っている唯一の(半)真の変数は、クロージャスコープで宣言するものです。したがって、その観点から見ると、オブジェクトリテラルを作成するときにプロパティを引用符で囲むべきではないのは当然のことです。
オブジェクトリテラルの宣言で引用符で囲まれたプロパティを許可することは間違っていると見なされるべきである、または少なくとも推奨されるべきではないとさえ言えます。

JSは素晴らしい言語であり、矛盾、癖、悪い考えの山に覆われています。悲しいことに、あなたが知っているのがガンクだけである場合(ほとんどの人がガンクを知っていますが、実際の言語とその力をどこで得るかを知っている人はほとんどいません)、一貫性があり、見栄えのする珍しい機能は最初は障害物のように見えます。ありがたいことに、あなたはあなたが望むことをすることを可能にするたくさんの構造を持っています、そしてそれをうまくやります。

この場合、すべてを書き出すか、power- data[a] = b; data[c] = d;... 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 に答える
0

連想配列のインデックスとしての変数 - Javascript

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

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