2012-02-15 11 views
0

データを入力するメインページがあります。 「作成」リンクをクリックすると、ajaxを呼び出してmysqlデータベースに新しいレコードを挿入します(メインページのデータを使用)。この新しいレコードを挿入しているmysqlテーブルにはauto_incrementプライマリキーがあり、 "作成"リンクがリダイレクトされているページでこのキーを知る必要があります。したがって、簡略化した簡単な例では、次のようになります。リンクリダイレクトの前にajax呼び出しでphpセッションが動作しない

index.phpにリンクがあります。 index.phpにもこのjquery $( "#create")があります。click($。ajax({url : "create.php"、キャッシュ:false、データ:{... index.phpのデータ...}}));

create.phpは、データベースにレコードを挿入し、それがない後に、この$ _SESSION [ "ID"] =にmysql_insert_id()。私は私の前に(メインページがロードされているので、すぐ後に)クリックイベントの外(レコードを挿入)AJAXを呼び出そうとしました$ _SESSIONからこのIDを取得する必要がnew.php

[「ID」]

実際に完全に機能したリンクをクリックしました。しかし、このようにランダムに動作します。この中には問題はありませんので、私は、文書の冒頭で適切にsession_start()を使用してい時にはそれが時にはそれがないん、それは今までにGoogle Chromeでこの方法を働いたことはない...

私はこれを何度も苦労しています。ありがとうございました。最後に、この問題はClickイベントのこのajaxコールポジションから来ていますが、修正方法はわかりません。私は、ページのリダイレクトとクリック操作がajaxと一緒にどのように正確に行われるかに関する知識が不足していると思います。

+0

は、あなただけのajax-までのクリックイベントをブロックするのを忘れていないことを確認しています:

これを修正するには、単にのようなAjax呼び出し成功した機能で、あなたの窓のURLを変更する必要がありますリクエストが完了しましたか? (例:$()。click(function(){return false;});) –

答えて

0

まず、あなたのセッションでは、index.phpページで起動する必要がありそうnew.phpとcreate.phpセッションクッキーにセッションIDを受信します。あなたは理論的に$ .ajaxを呼び出して、その直後にウィンドウの位置を変更することができます。しかし、これは、完了した実行としてcreate.phpを保証するものではありません(つまり、必要な行を作成し、データベースに格納するセッションに必要なデータを挿入します)。これはあなたが経験している競争状態につながる可能性があります。

$("#create").click($.ajax({ url: "create.php", cache: false, data: { ... some data from index.php ... }, success: function() { window.location = 'new.php'; } })); 
関連する問題