无论我做什么,这个形式都不会通过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中的地址。
帮助!感谢。
答案 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');
编辑:而不是true
和false
尝试0
和1
答案 3 :(得分:0)
您需要调用event.stopPropagation()