単一の AJAX URL を指すリンクがいくつかあります。パターンを持つリクエストごとに、単一の #DIV にロードできます: リンクごとにロードおよび削除します。必要なのは単一の URL だけなので、削除と再リクエストの手順を回避しようとしています。
私には2つのシナリオがありますが、まだ疑問があり、それらを処理するための提案がひどく必要です:
この単一の URL を各 DIV にロードするときに競合しないように、別のコンテナー #DIVS を作成し、(破棄/削除せずに) 通常の非表示と表示に進みます。これは、各リンクが同じ URL を要求し、同じ AJAX を各コンテナー #DIV にロードすることを意味します。各リンクが同じ AJAX を何度もロードするため、消費量が非常に多い。
#DIV を 1 つだけ作成し、この#DIVを別の .DIV (.ajax-container などの同じ包含クラス) に移動します。
ここで取得しようとしているのは、再利用可能で効率的なコードです。提案や例をいただければ幸いです。
更新、私の質問を明確にするためにこれまでに行われたことを追加しました:
$('a.browse')
.click(function(){
var t = $(this);
t.show();
t.parent().prev().find('input.tex').addClass('focus');
// @TODO, avoid using remove(), and move this into another .hasPicker class instead to REUSE the same content
$('#imgPicker,#closebox').remove();
$('.picker-on').removeClass('picker-on');
t.parent().prev().find('input.tex').after('<div id="imgPicker"></div>').parent().addClass('picker-on');
// @TODO, Check if #tabs has been loaded somewhere, and try to append it into current link that calls it
if ($('#tabs').length) {
t.parent().prev().find('#imgPicker').append('#tabs');
} else {
t.parent().prev().doAjax(); // load the same AJAX content
}
t.hide();
return false;
});
$('input.tex').wrap('<div class="hasPicker"></div>');
そして、ここに doAjax() のものがあります:
$.fn.doAjax = function() {
return this.each(function() {
// Check for pending request & cancel it
if (req) req.abort ();
//showLoading();
req = $.ajax ({
url: "?ajax=1",
method:'GET',
cache: true,
success: function (data) {
$('#imgPicker').html(data).show().after('<span id="closebox"></span>');
$('#closebox').show();
$("#tabs").tabs();
// reset request
req = null;
},
error:function() {
alert('Fail to load image collection.');
}
});
});
};
注: #imgPicker は #tabs の動的コンテナーです。以前は ui.dialog を持っていましたが、サイズを見て、リンクとそれを要求するフォームに対して絶対的な単純なカスタム ポップアップ位置だけでそれを実現しました。doAjax() は、同じコンテンツ (#tabs) をロードする単一のリクエストとして個別に処理されます。input.tex は、テキスト フィールド フォームのセット (#tabs 内のすべての項目/オプションを格納できる場所) であり、その後に同じ AJAX URL を介して同じ AJAX コンテンツを要求するリンクが続きます。
私が自分自身を明確にすることができることを願っています。
ありがとう