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 查询标识符?的主要内容,如果未能解决你的问题,请参考以下文章

基于jQuery实现的Ajax 验证用户名唯一性

Vue.js——基于$.ajax实现数据的跨域增删查改

django之jquery完成ajax

AJAX普通增删改查

jQuery中的Ajax几种请求方法

django之使用jquery完成ajax