2016-11-04 6 views
-1

私は数日間jQueryをAJAXで使いこなしています。私はAJAXでいくつかのコンテンツをロードしようとしています - この部分はうまく動作し、その後は別のスクリプトを実行します。しかし、最初のスクリプトがロードされたコンテンツは、2番目のスクリプトが終了するまで表示されません。コードは次のようになります。

$.ajax({ 
      url : folder, 
      success: function (data) { 
       $(data).find("a").attr("href", function (i, val) { 
        if(val.match(/\.(jpe?g|png|gif)$/)) { 
         var $codeText = "<li class='ui-state-default'><a href='#' data-featherlight='" + folder + val + "'><img src='" + thumbFolder + val + "' data-src='"+ thumbFolder + val + "'/></a></li>"; 
         $("ul[id=sortable]").append($codeText); 
         $("li").featherlight(folder + val); 
        }; 
       }); 
      } 
     }) 

$(window).ajaxComplete(function(){ 
    console.log("Haba"); 
    var x = 0; 
    while(x < 50000) 
     { 
     console.log("Haba nr "+x); 
     x++; 
     } 

すべてのコンソールメッセージが表示された後、コード全体がトリガーされますが、画像がWebサイトに表示されます。誰もが写真を最初に表示するために何をすべきか提案はありますか?私もdone()で試してみました。とajaxStop()は効果がありません。

+0

あなたはね'while'ループを使ってブラウザが画像を追加/レンダリングするのをブロックする – Andreas

+0

そしてブラウザを強制する方法を見つけようとしています呼び出しが完了した後にのみwhileループを実行します。 – filipg

答えて

0

ピクチャがロードされた後に実行したいコードをajaxコールの成功関数に移動し、コードの後に​​ピクチャをロードするだけでは、どうしてですか?

$.ajax({ 
    url : folder, 
    success: function (data) { 
     //Code to load pictures 

     console.log("Haba"); 
     var x = 0; 
     while(x < 50000) { 
      console.log("Haba nr "+x); 
      x++; 
     } 
    }); 

私はそれが戻って応答を取得した後、AJAX呼び出しが完了したので、それはあなたがそれが望むように動作していない理由があると思います。その応答は、ajax呼び出しの成功関数でロジックの前に実行されるajax complete関数をトリガーします。また、書かれた方法では、ajax呼び出しが失敗しても、ajax完全ロジックが起動します。私はあなたが望むとは思わない。

+0

私はこのアプローチを最初に試したが、うまくいかなかった。 – filipg

+0

結果は何でしたか?何が "うまくいかなかった"? – user1289451

+0

私は、写真を表示するために実行されるすべてのコードが表示されるまで待たなければならないことを意味します。 – filipg

1
あなたはasynchrone結果を得るために、AJAXのの.done()関数を使用する必要が

var jqxhr = $.ajax("example.php") 
 
    .done(function(data) { 
 
    alert("success : " + data ); 
 
    }) 
 
    .fail(function() { 
 
    alert("error"); 
 
    }) 
 
    .always(function() { 
 
    alert("complete"); 
 
    });

+0

同じ結果を試しました。すべてのコードを実行しなければならなかったので、画像が表示されました。 – filipg

+0

$ .postまたは$ .getを使用しようとするとこれは使いやすいです –

+0

ありがとう、私はそれを試してみるつもりですが、それでも私のコードで何が問題なのか知りたいです:) – filipg

0

は(のsetTimeoutを使用しようとする)

function ajaxDone(){ 
    console.log("Haba"); 
    var x = 0; 
    while(x < 50000) 
    { 
     console.log("Haba nr "+x); 
     x++; 
    } 
} 
$(window).ajaxComplete(function(){ 
    window.setTimeout(ajaxDone,1); 
}); 
関連する問題