为什么这个AJAX表单不会表现出来?

时间:2011-05-12 13:23:39

标签: jquery ajax

无论我做什么,这个形式都不会通过AJAX表现出来。用户单击以选择大小并在表单处理中使用此按钮的值时,有4个(在这种情况下为3个)不同的按钮。它还会使用#is_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()部分,那么其余部分就可以了,那里看起来有些不对劲。

我也不会这么想,因为我没有做$(&#34;#form-ID&#34;)。submit()...因为我&#39;我用这种更传统的方式尝试了它,它仍然无法工作。如果我把

alert( dataString );
return false;

在我创建数据字符串之后,所有操作都应该是这样,只有在我们到达ajax位之后它才会出错并且它似乎退出了jQuery而只是做了一个正常的帖子提交给了HTML中的地址。

帮助!感谢。

4 个答案:

答案 0 :(得分:2)

return false;

您在ajax回调中尝试return false到您的点击功能。此return语句不会返回到您的单击函数。

你的ajax声明结尾需要return false;

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

正如@ClementHerreman使用

所指出的那样
$(obj).click(function(event) { // <- event param
  ...
  event.preventDefault();
});

会更好。

答案 1 :(得分: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?

答案 2 :(得分:0)

尝试更改此

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

编辑:而不是truefalse尝试01

答案 3 :(得分:0)

您需要调用event.stopPropagation()

http://api.jquery.com/event.stopPropagation/