尽管async:true,但jQuery.post()在Firefox中刷新页面

时间:2010-08-30 12:50:27

标签: jquery ajax

这是我的第一篇文章,我觉得这是愚蠢的。我已经回答过这个问题:https://stackoverflow.com/questions/511947?tab=newest#tab-top虽然这仍然没有帮助。

我有3个PHP页面。主页面上有所有jQuery:

<body>
    <script type="text/javascript" src="includes/jquery-1.4.2.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            // for each trade, load the current comparisons
            <?php
            foreach ($trades as $trade) {
                ?>
                $("#<?php echo $trade; ?>Div").load("functions/loadPriceSurveyComparisons.php", {
                    trade: "<?php echo $trade; ?>"
                });

                $("#addComp<?php echo $trade; ?>").click(function() {
                    $.post("functions/addPriceSurveyComparisons.php", {
                        trade: "<?php echo $trade; ?>",
                        alb: $("#albProd<?php echo $trade; ?>").val(),
                        comp: $("#compProd<?php echo $trade; ?>").val()
                    }, function(data) {
                        $("#<?php echo $trade; ?>Div").load("functions/loadPriceSurveyComparisons.php", {
                            trade: "<?php echo $trade; ?>"
                        });
                    }, "xml");
                });
                <?php
            }
            ?>
        });
    </script>

此页面基本上会在加载时将项目列表加载到div元素中。 $ .load用于此目的。 $ .load有一个回调函数,它将click事件处理程序分配给3个不同的HTML元素(因此$ trade的$ echo)。

这些点击处理程序基本上使用$ .post执行AJAX请求。发布的页面如下:

<?php
header("Content-type: text/xml");
include("../includes/db_connection.php");
$sql = "INSERT INTO pricesurvey_compare (alb_product_id, comp_product_id, trade)
    VALUES (".$_POST['alb'].", ".$_POST['comp'].", '".$_POST['trade']."')";
mysql_query($sql);
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
?>
<data>
    <trade><?php echo $_POST['trade']; ?></trade>
    <alb><?php echo $_POST['alb']; ?></alb>
    <comp><?php echo $_POST['comp']; ?></comp>
    <errors><?php echo mysql_error(); ?></errors>
</data>

这个jquery.post()请求由于某种原因刷新了Firefox中的页面,我没有看到任何错误产生。我甚至无法在网络选项卡中查看带有firebug的请求,因为当页面刷新时,它被清除。有趣的是,脚本选项卡中根本没有出现javascript?但那是另一个我现在不会注意的头痛。

请注意,在jQuery方面,我几乎都是一个菜鸟。

2 个答案:

答案 0 :(得分:3)

不要忘记添加e.preventDefault()

$("#addComp<?php echo $trade; ?>").click(function(e) {
  e.preventDefault();
  // ...
}

答案 1 :(得分:2)

尝试添加

return false;

在“点击”处理程序中调用$.post(...)之后。我不确切知道那些“addComp”元素是什么,但如果它们是导致表单提交的元素,那么你的问题是表单被发送两次:一次由你的“单击“处理程序,然后单击普通浏览器表单功能。