4

非常に奇妙な(とにかく私にとって)javascriptの問題があります。私はページを開発していましたが、その過程で、デバッグを支援するために警告コードの行をいくつか追加しました。その後、すべてが機能しました。うふふ、そうでしょ?そんなに早くない。アラートを出すとすぐに (コードに他の変更はありません)、私のコードは失敗します。変数は未定義として返されます。これを引き起こす論理的な理由はありません。誰にもアイデアはありますか?関連するコードは次のとおりです...次のWORKSですが、もちろんアラートがポップアップします:

function videoDone() {
$.ajax({url:"getNextTrack.php",success:function(result){

  foo = result;
   }});
   alert(foo);
    document.getElementById("myVideo").src = foo;

上記のコードは正常に動作します。jquery ajaxを介して次のトラックをロードし、ビデオソースをそれに設定します。幸せな日々。ただし、アラートを削除してコードを次のように変更する以外に何もしない場合:

function videoDone() {
$.ajax({url:"getNextTrack.php",success:function(result){

  foo = result;
   }});

    document.getElementById("myVideo").src = foo;

foo は undefined に戻ります。これは私には意味がありません。他は何も変わっていません

4

2 に答える 2

10

スクリプトでは、コードは非同期呼び出しである Ajax 呼び出しを行います。つまり、呼び出しが行われている間、コードは実行され続けます。コード内のdocument.getElementById...行は、Ajax 呼び出しによって返されるデータに依存しています。アラートが設定されていない場合、document.getElementBy..ajax 呼び出しが完了する前にステートメントが呼び出されます。

配置されている場合、アラートは、ajax 呼び出しが完了するのに十分な時間、呼び出しを一時停止しています。アラートを削除すると、要素を取得して src 属性を設定する呼び出しが、Ajax 呼び出しが戻る前に実行されます。これにより、foo が未定義になります。

srcajax 呼び出しが完了した後に実行されるコールバック関数内に属性を設定するコードを含めるだけです。

function videoDone() {
$.ajax({url:"getNextTrack.php",success:function(result){
    document.getElementById("myVideo").src = result;
 }});

一言で言えば、ここで何が起こるかです:

アラートなし

  1. Ajax 呼び出しが発生する
  2. document.getElementById... が実行され、エラーがスローされる
  3. Ajax 呼び出しが返される

アラートあり

  1. Ajax 呼び出しが発生する
  2. 警告ウィンドウが表示され、コードの実行が一時停止します
  3. Ajax 呼び出しは、必要な変数の設定を返します
  4. document.getElementById... が実行され、エラーは発生しません
于 2013-07-08T08:07:35.250 に答える