Методы jQuery в обработчике успеха $ .ajax не работают - PullRequest
2 голосов
/ 27 марта 2012

У меня есть функция:

$(".delete").click(function() {
    $.ajax({
        url: "ServerHandler.ashx",
        data: "mode=delete&item=" + $(this).attr("title"),
        success: function() {
            $(this).parent().parent().remove();
            alert("hi");
        }
    });
});​

У меня проблема при удалении родительского объекта. Это просто не исчезает. Я пытался спрятаться - не помогло. Оповещение называется нормальным. Как решить?

Извините за плохой английский.

Ответы [ 4 ]

5 голосов
/ 27 марта 2012

Вы находитесь внутри другой функции с другим значением this по умолчанию.Передайте значение this из внешней функции с помощью функции $.ajax следующим образом:

$.ajax({
  context: this,
  ...
1 голос
/ 27 марта 2012

Поскольку this в функции обратного вызова ajax success отличается от функции обратного вызова click.Вы можете кэшировать его в локальную переменную или использовать параметр $.ajax() context.

$(".delete").click(function () {
    var $this = $(this);
    $.ajax({
        url: "ServerHandler.ashx",
        data: "mode=delete&item=" + $this.attr("title"),
        success: function () {
            $this.parent().parent().remove();
            alert("hi");
        }
    });
});
0 голосов
/ 27 марта 2012

Попробуйте это:

$(".delete").click(function() {
    $object = $(this);
    $.ajax({
        url: "ServerHandler.ashx",
        data: "mode=delete&item=" + $(this).attr("title"),
        success: function() {
            $object.parent().parent().remove();
            alert("hi");
        }
    });
});​
0 голосов
/ 27 марта 2012

Вы пытались установить параметр context: this, в функции ajax.

Когда срабатывает обработчик успеха, значение this не будет таким, как было до этого.

Смотрите здесь больше: http://api.jquery.com/jQuery.ajax/

...