jQuery.post () обновляет страницу в Firefox несмотря на асинхронность: true - PullRequest
1 голос
/ 30 августа 2010

Это мой первый пост, и у меня такое ощущение, что это что-то глупое.Я уже был на этот вопрос: 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 имеет обратный вызов, который назначает обработчики событий клика 3 различным элементам HTML (отсюда и PHP-эхо $ trade).

Эти обработчики кликов в основном выполняют запрос AJAX с использованием $ .post.Размещаемая страница выглядит следующим образом:

<?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 ]

4 голосов
/ 30 августа 2010

Не забудьте добавить e.preventDefault()

$("#addComp<?php echo $trade; ?>").click(function(e) {
  e.preventDefault();
  // ...
}
2 голосов
/ 30 августа 2010

Попробуйте добавить

return false;

сразу после вызова к $.post(...) в вашем обработчике "щелчка".Я не знаю точно, что это за элементы «addComp», но если они являются элементами, которые вызывают отправку формы, то ваша проблема в том, что форма публикуется дважды : один раз по вашему кликуобработчик, и один раз с помощью обычной функции браузера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...