область видимости переменной анонимной функции [js, ajax] - PullRequest
0 голосов
/ 18 апреля 2010
$(".delete").click(
    function()  {
        var thesender = this;
        $(thesender).text("Del...");
        $.getJSON("ajax.php", {},
            function(data) {
                if (data["result"])
                    $(thesender).remove(); // variable defined outside
                else
                    alert('Error!');
            }
        );

        return false;
    }
);

Это может вызвать проблемы, если пользователь нажимает на другой «.delete» до вызова обратного вызова ajax?

Ответы [ 3 ]

2 голосов
/ 18 апреля 2010

Будет запущен другой запрос AJAX в то же время, делая то же самое. Причиняет ли это проблемы или нет, зависит от серверной стороны вещей.

Как правило, вы удаляете какой-либо идентификатор или ключ ... Я предполагаю, что позже в этом коде вы будете, но сейчас он просто выполняет другое удаление и вызывает ajax.php ... каков результат этого полностью зависит от этой страницы PHP.

Обратный вызов происходит для , который ajax-запроса, когда , что ajax-запрос заканчивается, каждый запрос независим в этом отношении, поэтому каждый обратный вызов обрабатывается индивидуально. thesender находится внутри вашего текущего закрытия, поэтому оно также уникально для каждого запроса и соответствующего обратного вызова.

1 голос
/ 18 апреля 2010

Будет запущено еще одно событие. Вы можете использовать one вместо щелчка, если хотите, чтобы событие вызывалось только один раз. Кроме того, вы можете отслеживать, выполняется ли запрос AJAX; например, используя data следующим образом:

$('.delete').click(function () {
  if ($(this).data('inProgress')) {
    // Request in progress; cancel?
    return;
  } else {
    $(this).data('inProgress', true);
  };
});

Этого же можно добиться, используя глобальную переменную, добавляя классы и т. Д.

1 голос
/ 18 апреля 2010

Каждый раз, когда вызывается обработчик click, создается отдельное закрытие, поэтому каждый обратный вызов AJAX будет иметь ссылку на правильную переменную.

Поэтому вам не нужно об этом беспокоиться. (Предполагая, что сервер может обрабатывать запросы)

...