1

すでに質問を投稿しましたが、正確な問題が何であるかを理解しました。今、私はそのための解決策が必要です:)

これが私のコードです:

$('input[type="text"][name="appLink"]').unbind('keyup').unbind('ajax').keyup(function() {

    var iTunesURL = $(this).val();
    var iTunesAppID = $('input[name="iTunesAppID"]').val();

    $.ajax({
        type: 'POST',
        url: jsonURL,
        dataType: 'json',
        cache: false,
        timeout: 20000,
        data: { a: 'checkiTunesURL', iTunesURL: iTunesURL, iTunesAppID: iTunesAppID },
        success: function(data) {
            if (!data.error) {
                $('section.submit').fadeOut('slow');
                //Modifying Submit Page
                setTimeout(function() {
                    $('input[name="appLink"]').val(data.trackViewUrl);
                    $('div.appimage > img').attr('src', data.artworkUrl512).attr('alt', data.trackName);
                    $('div.title > p:nth-child(1)').html(data.trackName);
                    $('div.title > p:nth-child(2)').html('by '+data.sellerName);
                    $('span.mod-category').html(data.primaryGenreName);
                    $('span.mod-size').html(data.fileSizeBytes);
                    $('span.mod-update').html(data.lastUpdate);
                    $('select[name="version"]').html(data.verSelect);
                    $('input[name="iTunesAppID"]').attr('value', data.trackId);
                }, 600);
                //Showing Submit Page
                $('section.submit').delay('600').fadeIn('slow');
            } else {
                $('.json-response').html(data.message).fadeIn('slow');
            }
        },
        error: function(jqXHR, textStatus, errorThrown) {
            //$('.json-response').html('Probléma történt! Kérlek próbáld újra később! (HTTP Error: '+errorThrown+' | Error Message: '+textStatus+')').fadeIn('slow');
            $('.json-response').html('Something went wrong! Please check your network connection!').fadeIn('slow');
        }
    });
});

問題と説明:

キーがトリガーされるたびに、この ajax が読み込まれます。JSON ファイルが を検出すると、フラグkeyword付きで返されます。error = falseほら、それが起こった場合、それは効果をロードしたり、変更したりします...

問題は、たとえばasdasdasd、入力を開始した直後に貼り付け/書き込みを行うと、keywordまだ処理中の ajax クエリがいくつかあることです。これらは、fadeOut-In エフェクトを X 回変更してロードしています。

したがって、他のキーが押されている間、ajaxリクエストの処理を停止するソリューションが必要です!

前もってありがとう、マルセル

4

2 に答える 2

1

オプションasync: falseをajaxに追加してみてください。これにより、現在の呼び出しが終了するまで他の呼び出しが防止されます。

于 2013-02-10T20:09:22.193 に答える
1

個人的には、キーアップごとに起動しないようにスクリプトを待機させます。実際には、おそらくhttp://jqueryui.com/autocomplete/を使用します

ただし、再試行する前に ajax を中止することができます。

...
var iTunesAppID = $('input[name="iTunesAppID"]').val();

if (typeof req!='undefined' && req!=null) req.abort();
req = $.ajax({
...
于 2013-02-10T14:05:18.187 に答える