2010-08-30 66 views
1

這是我的第一篇文章,我有這種感覺,這是愚蠢的。我已經去過這個問題:https://stackoverflow.com/questions/511947?tab=newest#tab-top雖然這仍然沒有真正的幫助。jQuery.post()刷新Firefox中的頁面儘管異步:真

我有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元素(因此是$ trade的PHP回顯)。

這些點擊處理程序基本上使用$ .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的頁面,我沒有看到產生的任何錯誤。我甚至不能在Net標籤中查看帶有螢火蟲的請求,因爲當頁面刷新時這個請求被清除。還有什麼有趣的是,腳本標籤中沒有出現JavaScript?但那是我現在不會注意的另一個頭痛。

請注意,當談到jQuery時,我幾乎是個noob。

回答

2

不要忘記添加e.preventDefault()

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

Aaahhh,所以e.preventDefault()是在點擊處理程序嘿? :)謝謝,這工作! – thorne51 2010-08-30 14:34:05

2

嘗試增加

return false; 

在你的 「點擊」 處理程序調用$.post(...)之後。我不確切知道那些「addComp」元素是什麼,但是如果它們是導致表單被提交的元素,那麼你的問題是表單被髮送兩次:一次通過你的「單擊」處理程序,以及一次通過普通的瀏覽器表單功能

+0

抱歉,這是行不通的。問題出在點擊處理程序中。您所指的「addComp」元素是

+0

我說要在點擊處理程序中執行此操作。這就是我的答案中的短語,「在'click'處理程序中」,意思是:-)從事件處理程序中返回'false'與調用'preventDefault()'相同,再加上它也停止了「冒泡」事件。 – Pointy 2010-08-30 14:59:53