0
function ImageExist(url) 
            {
                var num;
               $.ajax({
                url:url,
                error: function()
                {
                   num = 0;
                },
                success: function()
                {
                    num = 1;
                }
            });
            return num;
            }

           function  ChangeColor(color, type){ 
           var count = 1;
        while(ImageExist("images/"+type+"/"+color+"/"+count+".jpg") != 0){
            count++;
        }
            var str = "";
            var cm = new Array(count);
           for(var i = 1; i < count; i++){
               cm[i] = "<img src=\"images/"+type+"/"+color+"/"+i+".jpg\" onclick=\"ChangeImg('"+type+"','"+color+"','"+i+"')\">";
               str = str+cm[i];
           }  
           document.getElementById("prodPhoto").innerHTML = cm[1];
           document.getElementById("prodPhotos").innerHTML = str;


            }

            function ChangeImg(type, color, img){
                var light = "<a href=\"images/"+type+"/"+color+"/"+img+".jpg\" rel=\"lightbox[sofa]\" title=\"Comfort M\"/>";
                document.getElementById("prodPhoto").innerHTML = light+"<img src=\"images/"+type+"/"+color+"/"+img+".jpg\">"+"</a>";
            }
            function preload(arrayOfImages) {
            $(arrayOfImages).each(function(){
            (new Image()).src = this;
            // Alternatively you could use:
            // (new Image()).src = this;
            });
            }

このコードは、product と color という名前の各フォルダーにいくつの画像があるかを調べることになっています。次に、それらをhtmlページに出力します。私のラップトップでは問題なく動作しますが、大学のネットワークではサイトがハングします。

これは、管理者ではないことに関連している可能性がありますか?

4

2 に答える 2

0

問題は、同期 while ループ内に非同期 Ajax 呼び出しを含む while ループがあり、ブラウザーのロックアップを要求していることです。画像が存在するかどうかを確認するために Ajax 呼び出しを行う理由はありません。イメージタグを非同期で使用します。

コードはニーズを 100% 満たすものではなく、基本的な例にすぎません。

function checkImage( url, good, bad) {
    var img = new Image();
    img.onload = good;
    img.onerror = bad;
    img.src = url;
}

function findImgs () {
   var currentImg = -1;
   function next(){
       currentImg++
       checkImage("foo" + currentImg + "jpg", next, done);
   }
   function done() {
       currentImg--;
       alert("last Good Count was " + currentImg);
   }
}
于 2013-04-30T13:40:16.727 に答える
0

while関数が非同期であるため、ステートメント内で大量の ajax 呼び出しを実行していますimageExistが、変数を返すときnumは alwaysundefinedです。したがって、あなたのコードは、「関数が 0 以外のインクリメント カウントを返し、再試行する」と述べています。

netパネルの下のFirefoxのjavascriptコンソールを見てください

于 2013-04-30T13:40:22.350 に答える