0

画面とサーバーの間で配列を継続的に送受信する必要があるプログラムがあります。配列は重要なので必要です。

したがって、onclick の php 配列として開始されます -> javascript に移動し、php 関数を再度呼び出してから、javascript 関数に戻します。これは私が迷っているところです。PHP配列が返された後、ユーザーが再度クリックすると、新しい配列がonclickで送信されるように、それをonclickに戻そうとしています。

どうすればこれを行うことができますか?

私がこれまでに持っているもの:

JavaScript 内で、成功メッセージが受信され、PHP 関数が新しい配列を配信した後、msg が値を保持する場所にこのような設定を行います。msg.question_id は整数のみを保持し、msg.array は php 配列を保持しています。

document.getElementById('buttons').innerHTML ="<a href='javascript:void(0)' onclick=\"movie_guess('yes',"+msg.question_id+","+msg.array+")\"><img  src=\"/assets/yes.png\" ></a><a href=\"javascript:void(0)\" onclick=\"movie_guess('no',"+msg.question_id+","+msg.array+")\"><img  src=\"/assets/no.png\" ></a> ";
4

2 に答える 2

2

まあ、ajax 応答で PHP 配列を返すべきではないと思います。区切り文字付きの文字列として送信できます。応答が成功したら、それらを分割して JavaScript 配列を作成できます。JSON を使用することもできます。エンコードしてアクセスします。

$phpArr=( 0 => 'Zero', 1 => 'One', 2 => 'Two'); // PHP Code
var jsArr= <?php echo json_encode($phpArr); ?>; // Javascript Code
for($i=0;<stop-condition>;$i++){      alert(jsArr[i]);  } // Javascript Code
于 2013-03-06T07:26:05.620 に答える
0

これは、適切にインデントされた、追加しようとしている要素です。

<a href='javascript:void(0)' onclick=\"movie_guess('yes',"+msg.question_id+","+msg.array+")\">
  <img  src=\"/assets/yes.png\" >
</a>
<a href=\"javascript:void(0)\" onclick=\"movie_guess('no',"+msg.question_id+","+msg.array+")\">
  <img  src=\"/assets/no.png\" >
</a>

代わりに、ハンドラーなしで追加することもできます (#リンク ターゲットとしても使用しました。また、引用符をエスケープする必要を回避した方法と、長い文字列を複数の行に分割する方法にも注意してください)。

var buttons = document.getElementById('buttons');
buttons.innerHTML = 
  '<a href="#"><img src="/assets/yes.png"></a>'+
  '<a href="#"><img src="/assets/no.png"></a>'

次に、イベント ハンドラーを関数として追加します。これによりパフォーマンスが向上し、現在のスコープから見えるものをすべて渡すことができます ( msgJavaScript オブジェクトであり、変更されないと想定しています)。addEventListener他にも利点がonclick=function(){...}あります。

var links = buttons.getElementsByTagName("a");
links[0].addEventListener("click", function(){
  movie_guess('yes', mgs.question_id, msg.array);
});
links[1].addEventListener("click", function(){
  movie_guess('no', mgs.question_id, msg.array);
});

より長いがより高速なバージョンは、まったく触れずinnerHTML、代わりに DOM を操作することです。

var buttons = document.getElementById('buttons');
var aYes = document.createElement("a");
aYes.href = "#";
aYes.addEventListener(...);
var imgYes = document.createElement("img");
imgYes.src = "/assets/yes.png";
aYes.appendChild(imgYes);
buttons.appendChild(aYes);
var aNo = document.createElement("a");
...
于 2013-03-06T07:33:08.820 に答える