2

Ruby関数へのajax GETを含むページがあります。Get リクエストは変数 @player を返す必要があります。ajax が「成功」した場合は、関数 popPools を呼び出す必要があります

$.ajax({
  type: "GET",
  data: { faceid : response.id },
  url: "/pool/mMypools2",
  success: popPools()
  })


function popPools(){
  $("<%= content_tag(:p, @player[0].id) %>"
  ).appendTo(document.getElementById("asd"));}

私の問題は、ajax が mMypools 応答から新しい変数を取得する前に、関数 popPools が自動的に呼び出されることです。

error:
Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id

onload @player には何も含まれていないためです。

ありがとうございました

4

2 に答える 2

0

応答テンプレートでやりすぎているようです。Ajaxコードは、アプリケーションからデータを取得しようとするため、実際にはコントローラーレベルに属します。テンプレートは「ダム」のままにして、渡された変数に応答する必要があります。

これを修正するには、ファイルの先頭を応答テンプレートから完全に移動します。コントローラレベルで@playerを適切にロードしたら、応答を続行します。ああ、Javascriptで結果のHTMLをエスケープすることを忘れないでください。そうしないと、content_tag関数に返される引用符がjQueryを壊してしまいます。

file.js.erb:

$(
  "<%= j content_tag(:p, @player[0].id) %>"
 ).appendTo(document.getElementById("asd"));}

このアドバイスがお役に立てば幸いです。

于 2013-02-24T16:24:18.930 に答える
0

の末尾から括弧を削除しますpopPools

$.ajax({
  type: "GET",
  data: { faceid : response.id },
  url: "/pool/mMypools2",
  success: popPools
  })

関数自体ではなく、 popPools 関数の結果を値として渡していました。success

于 2013-02-24T16:07:17.747 に答える