Jquery .ajax():独特的AJAX查询标识符?

时间:2011-12-25 10:21:18

标签: javascript jquery ajax coffeescript

我有一些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');
    }
});

如果没有,任何其他想法都会受到赞赏。

4 个答案:

答案 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)

使用随机数作为唯一标识符可大大降低复制标识符的可能性。