2013-08-26 42 views
1

我想根據jquery ajax請求的返回代碼切換和刷新div的內容。在jquery ajax處理程序中獲取此引用

我相信我不能將「item」與ajax請求處理程序正確綁定。我如何在「成功」處理程序中獲得對「this」的引用?

我認爲它是因爲成功句柄被執行異步,並且「item」變量處於殭屍狀態。

  • 我有兩個div開始添加就可以了
  • 當我點擊添加任何股利,它激發了ajax REQ,服務器處理並返回成功/錯誤
  • 成功後,我切換添加刪除的DIV,如果我上刪除
  • 點擊這兩個div的點擊幾下後
  • 同樣切換髮生時,我看到我的AJAX請求的,要麼增加發射3 -4次,單次點擊/刪除

我認爲我將div加入「item」的方式可能是問題所在。我不知道什麼是錯的。我正在考慮如何爲此寫一個jsfiddle。

我可以寫一個jsFiddle並重現該問題。上面提到的用例是我期望的行爲。的jsfiddle

http://jsfiddle.net/nEMvD/14/ 

JS:

function handleAdd() { 
$(".add").click(function(e) { 
    var item = $(this).parents(".item") 
    $.ajax({ 
     url: '/echo/html', 
     success: function(data) { 
      item.find(".add").remove() 
      item.append("<div class='remove'>x</div>") 
      item.hide().show(); 
      handleRemove() 
     } 
    }) 
}); 
} 
function handleRemove() { 
$(".remove").click(function(e) { 
    var item = $(this).parents(".item") 
    $.ajax({ 
     url: '/echo/html', 
     success: function(data) { 
      item.find(".remove").remove() 
      item.append("<div class='add'>+</div>") 
      item.hide().show(); 
      handleAdd() 
     } 
    }) 
}); 
} 

$(function() { 
    handleAdd() 
    handleRemove() 
}) 

編輯:

我想我加入背景下解決了這個問題:在Ajax請求這一點,然後在處理程序使用此。但我會等待來自社區的其他更好的選擇。

+0

您_can_參考您的項目變量的成功回調裏面 - 這是相當正常的。你爲什麼說你不能那樣做? – nnnnnn

+0

檢查瀏覽器控制檯,如果你看到錯誤,你會知道什麼是錯的。你確實有JS錯誤。將你的代碼複製到jsfiddle.net中,然後你可以看到它。 –

+0

我仍然看到在您的代碼 –

回答

1

你在你的JS代碼的語法有錯誤,這裏是正確的:

$(".remove").click(function(e) { 
    e.preventDefault(); 
    var item = $(this).parents(".item"); 
    var itemName = item.find(".itemName").text(); 
    $.ajax({ 
     url : "/ajax/removeItem/" + itemName, 
     dataType : "text", 
     success : function(data) { 
     item.find(".remove").remove(); 
     item.append(
      "<div class='add'>" + 
      "<span class='addHint'>some text</span>" + 
      "</div>" 
     ); 
     item.hide().show(); 
     } 
     } 
    ); 
    }); 
+0

他在語法上有問題,他原諒了逗號,也有問題});我剛剛編輯過代碼,這不是一個答案 –

相關問題