0

そのため、ajax 呼び出しを使用して一連の画像を置き換えようとしていますが、ajax 呼び出しの非同期性が原因で、同じ画像が複数回読み込まれる場合があります。(success 関数が順番に呼び出されていない) jQuery.ajax 関数には async: false のパラメーターがあることを認識していますが、ajax 呼び出しで読み込んでいるページはやや大きく、同期的に読み込まれると読み込み時間が長くなります。 . まだ非同期を使用する方法はありますが、同時に各画像が正しく読み込まれるようにする方法はありますか?

jQuery(document).ready(function($) {
    var thumb = $('.ihPhotoThumb');                 //original image elements
    for(var i = 0; i < thumb.size(); i++){          //go through all the images
        replaceImage($('.ihPhotoThumb').eq(i));     //call this function to replace the images
    }
});

function replaceImage(elem1){
    jQuery.ajax({
        url: elem1.parent().attr('href'), 
        success: function(data){
        var image_url =(jQuery(data).find("#ihf_detail_mainphoto_lrg img").attr('src')); //get the image url, which is wrapped in "#ihf_detail_mainphoto_lrg img"
        elem1.attr('src', image_url);              //replace the picture
    }
});

}

問題のページは次の場所にあります: http://www.idxre.com/toppicks/52813/OffBeachUnder3m/71472 スクリプトは 1714 行目から始まります。

4

2 に答える 2

0

ここに記載されている方法で問題を解決できました: http://damiannicholson.com/2010/07/07/jquery-ajax-queue.html

私が探していた解決策は、Ajax 呼び出しを非同期でありながら順次にするものだったのではないかと思います。そのため、Nosredna は正しい方向を示してくれました。

私はjavascriptの専門家ではないので、誰かが私の答えを改善できるかもしれません. しかし、最初に問題を引き起こしたのは、成功関数が非同期に返されることであり、2 つの成功関数が同時に実行されている場合、elem1 変数が別の成功関数によってオーバーライドされることであると思います。変数ですが、おそらく誰かが詳しく説明できます。

于 2012-06-14T19:28:52.607 に答える
0

Nosrednaが別の投稿で言ったように(同じ基本的な質問):

「私が考えることができる選択肢は 2 つあります。1 つはコールバックを介して連鎖させることです。もう 1 つは呼び出しを非同期ではなく同期にすることです。

それらを順次にしたい理由はありますか?それは物事を遅くします。

呼び出しを同期させるには、Ajax 呼び出しの async オプションを false に設定します。http://docs.jquery.com/Ajax/jQuery.ajax#optionsのドキュメントを参照 してください (オプション タブをクリックして参照してください)。

便利なプラグインのリンクもあります。

リンク:すべての AJAX 呼び出しを順次にする方法は?

于 2012-06-14T05:54:25.550 に答える