Jquery .ajax():唯一的 AJAX 查询标识符?
Posted
技术标签:
【中文标题】Jquery .ajax():唯一的 AJAX 查询标识符?【英文标题】:Jquery .ajax(): Unique AJAX query Identifier? 【发布时间】:2012-01-27 14:07:52 【问题描述】:我有一些 ajax 查询在 AJAX 查询的不同阶段(发送前、成功、失败、完成)创建和操作(外部)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');
);
如果没有,任何替代的想法表示赞赏。
【问题讨论】:
【参考方案1】:你尝试过这样的事情吗?
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();
);
【讨论】:
【参考方案2】:使用随机数作为唯一标识符大大降低了重复标识符的可能性。
【讨论】:
【参考方案3】:你试过了吗:
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')
这有什么不可行的原因吗?
【讨论】:
感谢您的想法,但不幸的是并非如此。某些命令可以从相同的元素触发(例如,相同的可排序拖放列表被重新排序),所以我需要识别查询,而不仅仅是触发它的元素。 (编辑:话虽如此,我想我可以输入一个时间戳,但理论上存在同时时间戳的风险。)【参考方案4】:如果我了解您的目的,则确实没有必要这样做。您需要做的就是创建一个标准的“正在加载...” div 模板并克隆它。将克隆存储在变量中并将其写入文档中的适当位置。当 AJAX 成功方法触发时,它将在创建它的范围内执行,这意味着您仍然可以访问同一个克隆,并且可以在其上调用任何必要的适当方法。
【讨论】:
以上是关于Jquery .ajax():唯一的 AJAX 查询标识符?的主要内容,如果未能解决你的问题,请参考以下文章