按下后退按钮后jQuery ajax调用不会更新mysql

时间:2010-12-06 01:20:17

标签: php jquery mysql ajax back-button

我有一个使用ajax将数据提交到mysql数据库的表单,然后将表单发送到PayPal。

但是,提交后,如果我单击浏览器上的后退按钮,更改一些字段,然后再次提交表单,则不会更新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();

?>

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

你真的应该使用POST而不是GET,但无论如何,我会检查以下内容:

  1. 点击返回并更改信息后jQuery正在执行ajax调用,您应该放置console.log或警报调用以查看javascript是否失败
  2. 在PHP中添加一些回声和一些退出并逐行进行,看看它到底有多远。由于您将其作为获取,您可以在浏览器中加载另一个选项卡并更改所需的信息。
  3. 如果你的jQuery中的$ j是你应该能够只执行$ j.serialize()的表单,那么将所有表单数据放在一个字符串中是一个方便的函数

答案 1 :(得分:0)

Mate,

您是否已将jquery包含在

$j(function(){


});

确保只在dom准备就绪时执行?

另外,我假设您已手动离开并将jquery从“$”重命名为“$ j”以防止命名空间冲突。如果不是这样的话,它应该是$(函数而不是$ j(函数

除此之外,这里有一些代码提示:

步骤1:将所有“名称”字段重命名为您希望它们位于“dataString”对象中的名称。例如,将输入[name = from]更改为名称“order_from”

第2步: 使用此代码。   附加$ J(函数(){     $ j(“。submit”)。click(function(){             var hasError = false;              if(hasError == false){                 var dataString = $ j('form')。serialize();

            $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。看看它是否有效,您可能会在页面上的其他脚本与

之间发生一些冲突

答案 2 :(得分:0)

原来问题是由于我使用的是iframe。我能够通过制作没有iframe的页面来解决问题。谢谢你的帮助!