【问题标题】:Jquery .ajax(): Unique AJAX query Identifier?Jquery .ajax():唯一的 AJAX 查询标识符?
【发布时间】: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');
    }
});

如果没有,任何替代的想法表示赞赏。

【问题讨论】:

    标签: javascript jquery ajax coffeescript


    【解决方案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 成功方法触发时,它将在创建它的范围内执行,这意味着您仍然可以访问同一个克隆,并且可以在其上调用任何必要的适当方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-11-16
          • 1970-01-01
          • 2012-03-17
          • 2013-06-25
          • 2013-07-05
          • 2010-11-05
          • 2013-01-28
          相关资源
          最近更新 更多