2011-05-12 6 views
0

내가 무엇을 하든지간에이 양식은 AJAX를 통해 전혀 작동하지 않습니다. 사용자가 크기를 선택하기 위해 클릭하는 4 개의 버튼 (이 경우 3 개)과이 버튼의 값이 양식 처리에 사용됩니다. 또한 정상적으로 있습니다 .. #is_ajax 숨겨진 필드 (작동시)를 저하됩니다이 AJAX 양식이 왜 작동하지 않습니까?

HTML :

<form action="../bin/func/actions/add.action.php" method="post" id="addToCart"> 
     <input type="hidden" name="is_ajax" value="false" id="is_ajax"> 
     <input type="hidden" name="action" value="add"> 
     <button class="add-size" value="S">S</button> 
     <span class="no-stock">M</span> 
     <button class="add-size" value="L">L</button> 
     <button class="add-size" value="XL">XL</button> 
    </form> 
      <div id="cart-success"></div> 

jQuery를 :

$(function() { 
$(".add-size").click(function() { 
    // first off set hidden variable to TRUE so we know AJAX is playing ball 
    $("#is_ajax").val(true); 

    // serialise the form data 
    var dataString = 'size=' + $(this).val() + '&is_ajax=' + $("#is_ajax").val(); 

    // slide down the small cart 
    $("#cart-expand").slideDown(200); 
    $("#cart-thumb a").toggle(); 

    // let's do this.. 
    $.ajax({ 
     type: "POST", 
     url: "../bin/func/actions/add.action.php", 
     dataType: 'html', 
     data: dataString, 
     success: function(data){ 
     $("#cart-success").html(data);   
     return false; 
     } 
    }); 
}); 
}); 

PHP (감수)

<?php 
if($_POST['is_ajax'] == 'true') 
    echo 'true'; 
else 
    echo 'false'; 
?> 

내가 무엇을해도 기본 양식 작업이 항상 시작되는 것처럼 보이며 페이지가 곧바로 페이지로 리디렉션됩니다. PHP 페이지. $ .ajax() 부분을 제거하면 나머지 부분이 작동합니다. 거기에 뭔가 잘못된 것 같습니다.

또한 나는 $ ("# form-ID")를 사용하지 않고 있다고 생각하지 않습니다. submit() ... 더 일반적인 방법을 시도했지만 여전히 작동하지 않습니다. . 내가

alert(dataString); 
return false; 

를 넣으면 내가 모두가 예상대로 행동하는 datastring를 생성 한 후, 우리는 아약스 비트에 도착 후에는 모든 잘못 만 그리고 jQuery를 중퇴 것 같다 단지 정상적인 게시물을 HTML에있는 주소로 제출하십시오.

도움말! 감사.

답변

2

return false;

귀하의 요에 return false하려고 통해 귀하의 아약스 콜백 내부에서 함수를 클릭하십시오. 이 return 문은 클릭 기능으로 돌아 가지 않습니다.

ajax 성명 끝 부분에 return false;이 필요합니다.

$.ajax({ 
    ... 
    success: function() { 
    $("#cart-success").html(data); 
    } 
}); 
return false; 

으로는 더 좋을 것이다

$(obj).click(function(event) { // <- event param 
    ... 
    event.preventDefault(); 
}); 

를 사용 @ClementHerreman에 의해 지적했다.

+0

bish bash 당신은 영웅입니다. 그것이 나를 허용 할 때 당신에게 사랑을 줄 것입니다. – artparks

+0

'event.preventDefault()'가 기본 동작을 막는 더 좋은 방법이 아닌가? –

+0

@ClementHerreman 예입니다. – Raynos

0

변경이

$("#is_ajax").val('true');

편집 시도 : 시도

true의 Istead 및 false01

+0

불행히도 더 현명한 것입니다 – artparks

+0

편집 대답을 참조하십시오 – jimy

1
폼이 AJAX를 사용하여 제출 된 경우, 당신은 그냥 좀 걸릴 수 있습니다 알고 싶다면

정말, 특히 당신의 질문에 대답 만하지 HTTP 요청 헤더

예 :이 100 % 정확한 추측 아니라고

if ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') 
{ 
    //submitted via AJAX 
} 
else 
{ 
    //not submitted via AJAX 
} 

참고. 자세한 설명은 Does $_SERVER['HTTP_X_REQUESTED_WITH'] exist in PHP or not?을 참조하십시오.

관련 문제