2011-11-02 7 views
0

나는 간단한 투표 메커니즘을 가지고 있습니다. 나는 차단하려고합니다. 이전에 도움이 좀 있는데 자체적으로 작동하지만 아약스 콜백으로 처리하려고합니다. 반환 된 데이터를 얻지 만 funciton은 콜백으로 간단한 경고와 함께 작동하지만 어떤 이유 때문에 실행되지 않습니다. 함수)하지만 숫자가 증가하지는 않습니다. 다음은 간단한 HTML 여기jQuery 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 
    echo('ok'); 
?> 

에서 에코을 수행한다 (PHP/success.php) 내 클릭 기능의

$(".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

'Bad'를 클릭하면 어떻게됩니까? '$ (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