2010-06-17 114 views
3

爲什麼是它下面的腳本通過移除relievant HTML實體工程客戶方:jQuery的阿賈克斯成功問題

$(".ui-delete").click(function() { 

    $.ajax({ 
     url: 'delete.aspx', 
     type: 'POST', 
     data: { strWidgetID:$(this).parents(".widget").attr("id") }, 
     error: function() { alert('Error'); }, 
     success: function() { alert('Success'); } 
    }); 


    $(this).parents(".widget:first").remove(); 
}); 

但下面的查詢,這是「更合適的」,不通過移除HTML實體工作?

$(".ui-delete").click(function() { 

    $.ajax({ 
     url: 'delete.aspx', 
     type: 'POST', 
     data: { strWidgetID:$(this).parents(".widget").attr("id") }, 
     error: function() { alert('Error'); }, 
     success: function() { 
      alert('Success'); 
      $(this).parents(".widget:first").remove(); 
     } 
    }); 

}); 

第一個腳本做兩個客戶方和服務器端正確,第二腳本執行服務器端的正確,但在客戶方,它只是顯示一個警告「成功」,但不會刪除HTML實體「部件」

有什麼建議嗎?

+0

http://stackoverflow.com/editing-help - 具有四個空格的縮進代碼可以正確呈現。因爲你是新來的(歡迎!)我已經爲你修好了。 – 2010-06-17 08:05:22

+0

$(this)可能不是您認爲的那樣。在那裏放一個斷點並檢查。 – 2010-06-17 08:05:38

回答

7

在成功處理程序中,this與您的單擊處理程序(它是$ .ajax使用的XMLHttpRequest對象)不同。

捕捉到this你感興趣的$就調用前一個參考:根據上下文

$(".ui-delete").click(function() { 
    var that = this; 

    $.ajax({ 
    // etc. 
    success: function() { 
     $(that).parents('.widget:first').remove(); 
    } 
    }); 
}; 
+0

這是完美的!謝謝。 – oshirowanen 2010-06-17 08:08:06

1

,$(這)是指不同的對象。看看這個鏈接What is this? 在第二個代碼示例中,這指的是ajax設置對象而不是'ui-delete'元素。