2013-08-26 19 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

他在语法上有问题,他原谅了逗号,也有问题});我刚刚编辑过代码,这不是一个答案 –

相关问题