2011-11-02 128 views
0

我有一个简单的投票机制我试图阻止。我早些时候得到了一些帮助,它可以自己工作,但我试图用ajax回调来实现它 - 我得到返回的数据,但函数不会因为某种原因而被解雇(尽管它可以作为回调函数使用简单的警报函数),但它不会增加数字。 下面是简单的HTMLjQuery AJAX回调函数问题

<form name="vote" id="vote" method="post" action="PHP/success.php"> 
    <a class="vote">Good</a><input class="qty" type="text" name="qty" value="0" readonly="readonly" /> 
    <a class="vote">Bad</a><input class="qty" type="text" name="qty" value="0" readonly="readonly" /> 
</form> 

这里是虚拟PHP(PHP/success.php),只有在这一点上

<?php 
    echo('ok'); 
?> 

执行回声和我的点击功能

$(".vote").click(function() { 
    $.ajax({ 
     type: "POST", 
     url: "PHP/success.php", 
     success: function(data) { 
      if (data=="ok") { 
       var input = $(this).next(".qty"); 
       input.val(parseFloat(input.val()) + 1); 
      } else { 
     alert('error'); 
      } 
     } 
    }); 
}); 

再次如果我更换(数据=“好”)var和函数与警报工作正常。 thx

+0

可能只是'data'上的空白,试试'$ .trim(data)=='ok''来代替。 –

+0

如果我点击“坏”会发生什么?在这种情况下,$(this).next(“。qty”)将失败。 –

+0

@ muistooshort nope。这令人费解......它看起来不错,不是吗? –

回答

2

var input = $(this).next(".qty");放在外面。

$(".vote").click(function() { 
    var input = $(this).next(".qty"); 
    $.ajax({ 
     type: "POST", 
     url: "PHP/success.php", 
     success: function(data) { 
      if (data=="ok") {    
       input.val(parseFloat(input.val()) + 1); 
      } else { 
     alert('error'); 
      } 
     } 
    }); 
}); 
+0

真棒。始终存在“思考全球行动”的问题。我很欣赏它的男人。 –

4

我觉得问题在于这一行。

var input = $(this).next(".qty"); 

$(this)没有给出点击元素。

如果通过

var input = $(".vote").next(".qty"); 

函数工作代替它。

编辑:

我试着用这个和它的工作。

$(".vote").click(function() { 
         var kk = $(this); 

$.ajax({ 
    type: "POST", 
    url: "a.php", 
    success: function(data) { 

    if (data=="ok") { 

      var input = kk.next(".qty"); 
      input.val(parseFloat(input.val()) + 1); 
     } else { 
    alert('error'); 
     } 


    } 
}); 
}); 
+2

这似乎是正确的,但你应该在回调之外保存对this的引用,而不是 - 如果有多个'.vote'元素,你的回答将无法正常工作。 – nrabinowitz

+0

@nrabinowitz所以只需将var kk = $(this)移到.ajax调用之上,类似于xdazz的回答吧?那会使它全球正确? –

+0

@DirtyBirdDesign - 是的,这就是我的想法。 – nrabinowitz