Php-сессия в ajax-вызове перед перенаправлением ссылки не работает - PullRequest
0 голосов
/ 16 февраля 2012

У меня есть главная страница, где вы вводите некоторые данные. После того, как вы нажмете на ссылку «создать», она вызовет ajax для вставки новой записи в базу данных mysql (с данными с главной страницы). Таблица mysql, в которую я вставляю эту новую запись, имеет первичный ключ auto_increment, и мне нужно знать этот ключ на странице, где перенаправляется ссылка «создать». Чтобы показать это в коротком упрощенном примере, у меня есть что-то вроде этого:

index.php имеет ссылку Создать У index.php также есть этот jquery $ ("# create"). click ($. ajax ({url: "create.php", cache: false, data: {... некоторые данные из index.php ...} }));

create.php вставляет запись в базу данных и после этого делает это $ _SESSION ["id"] = mysql_insert_id ();

new.php должен получить этот идентификатор из $ _SESSION ["id"]

Когда я пытался вызвать ajax (вставить запись) вне события click (то есть сразу после загрузки главной страницы), прежде чем я фактически щелкнул ссылку, он работал отлично. Однако, таким образом, это работает случайным образом. Иногда бывает, иногда нет, и никогда не работал в Google Chrome таким образом ...

Я правильно использую session_start () в начале документов, поэтому в этом нет проблем.

Большое спасибо за любую помощь, с которой я много дней борюсь с этим, и наконец я обнаружил, что проблема связана с позицией вызова ajax в событии click, но я понятия не имею, как это исправить. Я предполагаю, что мне не хватает некоторых знаний о том, как именно перенаправление страниц и событие click работают вместе с ajax.

1 Ответ

0 голосов
/ 16 февраля 2012

Сначала ваш сеанс должен быть запущен на странице index.php, чтобы new.php и create.php получили идентификатор сеанса в файле cookie сеанса.Вы можете теоретически вызвать $ .ajax, а затем изменить расположение окна сразу после него.Однако это не гарантирует, что create.php завершит выполнение (т. Е. Создал нужную строку и вставит нужные данные в сеанс, который должен храниться в вашей базе данных).Это может привести к состоянию гонки, с которым вы столкнулись.

Чтобы это исправить, вам просто нужно изменить URL окна в функции при успешном вызове Ajax, например:

$("#create").click($.ajax({ url: "create.php", cache: false, data: { ... some data from index.php ... }, success: function() { window.location = 'new.php'; } }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...