2010-12-06 49 views
0

我有一個表單使用ajax將數據提交給mysql數據庫,然後將表單發送到PayPal。jQuery ajax調用不會在按下按鈕後更新mysql

但是,在提交後,如果我單擊瀏覽器上的後退按鈕,更改一些字段,然後再次提交表單,mysql數據不會更新,也不會創建新條目。

這裏是我的Jquery:

$j(".submit").click(function() { 
     var hasError = false; 
     var order_id = $j('input[name="custom"]').val(); 
     var order_amount = $j('input[name="amount"]').val(); 
     var service_type = $j('input[name="item_name"]').val(); 
     var order_to = $j('input[name="to"]').val(); 
     var order_from = $j('input[name="from"]').val(); 
     var order_message = $j('textarea#message').val(); 
     if(hasError == false) { 
      var dataString = 'order_id='+ order_id + '&order_amount=' + order_amount + '&service_type=' + service_type + '&order_to=' + order_to + '&order_from=' + order_from + '&order_message=' + order_message; 
      $j.ajax({ type: "GET", cache: false, url: "/gc_process.php", data: dataString, success: function() { } }); 

     } else { 

      return false; 

     } 
    }); 

這裏是我的PHP腳本的樣子:

<?php 

// Make a MySQL Connection 
include('dbconnect.php'); 

// Get data 
$order_id = $_GET['order_id']; 
$amount = $_GET['order_amount']; 
$type = $_GET['service_type']; 
$to = $_GET['order_to']; 
$from = $_GET['order_from']; 
$message = $_GET['order_message']; 

// Insert a row of information into the table 
mysql_query("REPLACE INTO gift_certificates (order_id, order_type, amount, order_to, order_from, order_message) VALUES('$order_id', '$type', '$amount', '$to', '$from', '$message')"); 

mysql_close(); 

?> 

任何想法?

+0

嘿,隊友,你能看到使用Firebug控制檯的電話嗎? – 2010-12-06 01:26:23

+0

這是實際的PHP腳本嗎?聽說過SQL注入? – Hamish 2010-12-06 01:26:42

回答

0

原來,問題是由於我使用iframe的事實。我能夠通過使頁面沒有iframe來解決問題。感謝您的幫助!

0

你真的應該使用POST而不是GET,但無論如何,我會檢查以下內容:

  1. 這jQuery是執行單擊返回並更改信息後Ajax調用,你應該把任一個console.log或一個警報調用來查看javascript是否失敗
  2. 在PHP中添加一些回聲和一些退出,並逐行查看,看它有多遠。既然你把它作爲get,你可以在瀏覽器中加載另一個選項卡,並更改你需要的信息。
  3. 如果你的jQuery $ j是你應該能夠只是做$ j.serialize()的形式,這是一個方便的功能,以獲得一個字符串
0

伴侶的所有形式的數據,

你封閉在

$j(function(){ 


}); 

你jQuery來確保它只有當DOM準備好執行?

另外,我假設你已經手動將jquery從「$」更名爲「$ j」,以防止名稱空間衝突。如果不是這種情況,應該是$(功能,而不是附加$ J(功能

從反正開,這裏有一些提示,爲您的代碼:

第1步:重命名所有的「名稱」字段是你希望他們成爲你的「dataString」對象名稱改變。例如輸入[名稱=從]有名爲「order_from」

步驟2: 使用此代碼 附加$ J(函數( ){if(hasError == false){ var dataString = $ j('f('。submit')。click(function(){var1Error = false; ) ORM')序列化();

  $j.ajax({ type: "GET", cache: false, url: "/gc_process.php?uu="+Math.random(), data: dataString, success: function() { } }); 

     } else { 

      return false; 

     } 
    }); 

}); 你會注意到我在URL上打了一個隨機變量「uu = random」,這通常是jquery的一個內置函數,但爲了確保它沒有緩存響應,你可以使用這種方法強制它。

祝你好運。如果這不起作用,請在沒有重新命名jquery的情況下嘗試該腳本。看看是否有效,你可能會在頁面上的其他腳本之間發生衝突