JQuery AJAX вызов не будет обновлять MySQL после нажатия кнопки назад - PullRequest
0 голосов
/ 06 декабря 2010

У меня есть форма, которая использует 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 голосов
/ 06 декабря 2010

Мате,

Вы вложили свой jquery в

$j(function(){


});

Чтобы убедиться, что он выполняется только тогда, когда дом готов?

Кроме того, я предполагаю, что вы вручную перешли и переименовали jquery из "$" в "$ j", чтобы предотвратить конфликты пространства имен. Если это не так, это должно быть $ (function, а не $ j (function

)

В любом случае, вот несколько советов для вашего кода:

Шаг 1: переименуйте все поля «name» в имя, которое вы хотите, чтобы они были в вашем объекте «dataString». Например, измените input [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;

        }
    });

}); Вы заметите, что я добавил случайную переменную "uu = random" в URL, это, как правило, встроенная функция в jquery, но чтобы убедиться, что она не кэширует ответ, вы можете форсировать ее с помощью этого метода.

удачи. Если это не сработает, попробуйте скрипт без переименования jquery на новой странице. Посмотрите, работает ли это, у вас могут быть некоторые конфликты между этим и другими сценариями на странице

0 голосов
/ 08 декабря 2010

Оказывается, проблема в том, что я использую iframes.Мне удалось решить проблему, сделав страницу без фреймов.Спасибо всем за помощь!

0 голосов
/ 06 декабря 2010

Вы действительно должны использовать POST вместо GET, но в любом случае я бы проверил следующее:

  1. То, что jQuery выполняет вызов ajax после того, как вы щелкнете назад и измените информацию, вам, вероятно, следует добавить либо console.log, либо вызовы с предупреждением, чтобы проверить, не работает ли JavaScript
  2. Добавьте немного эха в PHP и несколько выходов и построчно посмотрите, как далеко он продвинется. Поскольку он у вас есть, вы можете просто загрузить другую вкладку в своем браузере и изменить нужную информацию.
  3. если $ j в вашем jQuery - это форма, которую вы можете просто выполнить $ j.serialize (), это удобная функция для получения всех данных формы в одну строку
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...