2011-05-12 50 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后,只有后,我们得到的AJAX位,这一切都错了,它似乎辍学的jQuery的,只是做普通帖子提交到HTML中的地址。

帮助!谢谢。

回答

2

return false;

你试图return false哟你从ajax回调中点击函数。此返回语句不会返回到您的点击功能。

您需要return false;在您的ajax语句的末尾。

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

由于使用

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

会更好,指出了@ClementHerreman。

+0

bish bash bosh你是英雄。当它让我爱你时,会给你一些爱。 – artparks 2011-05-12 13:32:58

+0

是不是'event.preventDefault()'更好的方式来防止,以及默认行为? – 2011-05-12 13:37:44

+0

@ClementHerreman是的。 – Raynos 2011-05-12 13:38:58

0

尝试改变这种

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

编辑:

true Istead和false尝试01

+0

不幸的是,虽然可能更明智 – artparks 2011-05-12 13:30:49

+0

查看编辑答案 – jimy 2011-05-12 13:34:02

1

没有真正回答您的具体问题,但如果你想知道,如果一个形式使用AJAX提交的,你可以看看HTTP请求标头。

实施例:

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

注意,这不是一个100%准确的猜测。有关更多解释,请参见Does $_SERVER['HTTP_X_REQUESTED_WITH'] exist in PHP or not?