我有一些ajax查询创建&在AJAX查询的不同阶段(beforeSend,success,failure,complete)中操作(外部)DOM元素。可以触发多个查询而其他查询仍在处理,我想知道如何识别每个查询的DOM元素以触发正确的事件。
那么,jQuery .ajax是否提供对唯一查询标识符的访问权限,我可以将其解析为每个相应DOM元素的ID?
$.ajax({
UNIQUE_ID_NEEDED_HERE = ??? # Need to get unique identifier for this AJAX query
url: '/my/query',
data: my_data,
dataType: "json",
beforeSend: function (response) {
$('#ajax_messages').append('<div class="loadingStatus" id="' + UNIQUE_ID_NEEDED_HERE + '">Re-ordering tasks</div>');
},
success: (message, text, response) {
$(UNIQUE_ID_NEEDED_HERE).attr('class', 'successfulStatus');
$(UNIQUE_ID_NEEDED_HERE).html('Tasks re-ordered');
}
});
如果没有,任何其他想法都会受到赞赏。
答案 0 :(得分:5)
你尝试过这样的事吗?
var constructRequest = (function() {
var startNumber = 0;
return function() {
var local = "request_id_"+(++startNumber);
$.ajax({
url: "someurl.php",
cache: false,
success: function(html){
/**
* Every time on success callback
* you will have unique local variable
* like this:
* request_id_1, request_id_2, request_id_3
* and so on.
***/
alert(local);
}
});
}
})();
$(document).ready(function() {
constructRequest();
constructRequest();
});
答案 1 :(得分:1)
如果我明白你的目的,那就没有必要这样做了。您需要做的就是创建一个标准的“loading ...”div模板并克隆它。将克隆存储在变量中并将其写入文档中的适当位置。当AJAX成功方法触发时,它将在创建它的范围内执行,这意味着您仍然可以访问同一个克隆,并可以调用其上所需的任何适当方法。
答案 2 :(得分:0)
你有没有尝试过:
function doAjaxMagic(idOfEl){
$.ajax
url: '/my/query'
data: my_data
dataType: "json"
beforeSend: (response) ->
$('#ajax_messages').append('<div class="loadingStatus" id="' + idOfEl + '">Re-ordering tasks</div>')
success: (message, text, response) ->
$("#"+idOfEl).attr('class', 'successfulStatus')
$("#"+idOfEl).html('Tasks re-ordered')
}
有什么理由不起作用?
答案 3 :(得分:0)
使用随机数作为唯一标识符可大大降低复制标识符的可能性。