Jquery .ajax (): уникальный идентификатор запроса AJAX? - PullRequest
4 голосов
/ 25 декабря 2011

У меня есть несколько ajax-запросов, которые создают и манипулируют (внешними) элементами DOM на разных этапах AJAX-запроса (beforeSend, success, fail, complete). Несколько запросов могут быть запущены, в то время как другие все еще обрабатывают, и мне интересно, как определить элементы DOM для каждого запроса, чтобы вызвать события для правильного.

Итак, предоставляет ли jQuery .ajax доступ к уникальному идентификатору запроса, который я могу анализировать в идентификатор для каждого соответствующего элемента DOM?

$.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 ]

5 голосов
/ 25 декабря 2011

Вы пробовали что-то подобное?

    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 голос
/ 25 декабря 2011

Если я понимаю вашу цель, в этом нет необходимости.Все, что вам нужно сделать, это создать стандартный шаблон div "loading ..." и клонировать его.сохраните клон в переменной и запишите его в соответствующее место в вашем документе.Когда метод успеха AJAX срабатывает, он будет делать это внутри области, в которой он был создан, что означает, что у вас все еще есть доступ к тому же клону, и вы можете вызывать любые подходящие методы, необходимые для него.

0 голосов
/ 25 декабря 2011

Использование случайного числа в качестве уникального идентификатора значительно снижает вероятность дублирования идентификатора.

0 голосов
/ 25 декабря 2011

Вы пробовали:

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')


}

Есть ли причина, по которой это не сработает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...