【发布时间】:2011-11-25 00:16:28
【问题描述】:
我正在尝试执行以下操作:
- 我有一个链接列表,每个链接在单击时执行不同的 Ajax 调用。
- 每个 Ajax 响应都被分配了一个显示目标。
- 在处理请求时,仍然可以单击链接(= 进一步的 Ajax 调用)。
- 下面的示例有两个目标和四个链接:两个指向 DIV#d1,两个指向 DIV#d2。
如何确保只有对最后一个请求的响应最终会显示在其目标 DIV 中?
如果我单击标记为Data1 的链接,然后单击Data2,则必须中止第一个调用,因为 Response1 可能在 Response2 之后到达。这个问题似乎意味着我必须跟踪每个目标的先前请求,以便在发出新请求时中止它们。
我已经编写了这段代码。我想知道您是否认为这是正确的方法。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title></title>
</head>
<body>
<ul>
<li><a href="data1.htm" class="trigger" data-target="d1">Data 1</a></li>
<li><a href="data2.htm" class="trigger" data-target="d1">Data 2</a></li>
<li><a href="data3.htm" class="trigger" data-target="d2">Data 3</a></li>
<li><a href="data4.htm" class="trigger" data-target="d2">Data 4</a></li>
</ul>
<div id="d1"></div>
<div id="d2"></div>
<script type="text/javascript" src="/test/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
$(function(){
var register = {};
$(".trigger").on("click", function() {
var target = $(this).attr("data-target");
var url = $(this).attr("href");
if (register[target] == undefined) register[target] = [];
ajaxCall = $.get(url, function(data) { // Ajax request
$("#" + target).html(data);
});
for (a in register[target]) { // Aborts existing ajax requests for this target
register[target][a].abort();
}
register[target] = []; // Empty register for this target
register[target].push(ajaxCall); // Register current ajax request
return false;
});
});
</script>
</body>
</html>
【问题讨论】:
标签: javascript jquery