2012-02-15 4 views
0

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

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 (вставить запись) вне события мыши (так сразу после загрузки основной страницы), прежде чем я фактически нажал ссылку, в которой он работал отлично. Тем не менее этот способ работает беспорядочно. Иногда это иногда бывает, и это никогда не срабатывало в Google Chrome таким образом ...

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

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

+0

уверены, что вы не просто забыли заблокировать клик-событие, пока в ajax- запрос делается? (например: $(). click (function() {return false;});) –

ответ

0

Сначала ваш сеанс должен быть запущен на странице 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'; } })); 
Смежные вопросы