2010-12-06 128 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的情况下尝试该脚本。看看是否有效,你可能会在页面上的其他脚本之间发生冲突