1

特定のリンク セットのいずれかがクリックされたときに、セッション変数を 0 に設定したいと考えています。これを行うために、JavaScript ファイルに次のコードを追加しました。

$(window).load(function () {
    $("#hdr li a").click(function () {
        $.ajax({
            type: "POST",
            url: "clear.php",
            data: "width=0"
        });
    });
});

(データを無視します: "width=0"... このデータは clear.php では使用しません。データ フィールドを指定する必要があるのではないかと思ったので、そこに入れました。)

ファイル「clear.php」には、次のものがあります。

<?php session_start();

$_SESSION['name'] = 0;

?>

つまり、#hdr li のいずれかのリンクがクリックされた場合、セッション変数を 0 に設定する clear.php を介して、リンクが指すページにユーザーが移動する必要があるという考えです。

これは、一部のブラウザー (Firefox および Chrome) では機能しますが、他のブラウザー (Safari など) では機能しません。

これは、私が望むものを実装するための標準/正しい方法ですか? また、clear.php にアクセスした後、ブラウザーはどのように移動先を知るのでしょうか? なんとなく動きますが、最初に考えたのは、最終的な宛先 URL を clear.php に渡してから、「ヘッダー」を使用して clear.php から最終的な宛先に移動することでした。

4

4 に答える 4

3

Ajax は必要ですか? ユーザーを別のページにリダイレクトし、そのページにデータを渡したいだけの場合は、そのデータを URL に含める方が簡単な場合があります。

<a href="http://yoursite.com/interesting_page.php?new_session_variable=whatever">Link</a>

これで、php は単純になります。

$_SESSION['name'] = $_GET['new_session_variable'];

これで JavaScript への依存がなくなりましたが、それは理にかなっていますか? :)


たとえば、ユーザーがページ上のリンクの1つをお気に入りとしてマークできるようにしたい場合など、特定の状況ではあなたのアプローチが適切であることに言及する価値があると思います。それらを同じページにリダイレクトしてページ コンテンツの大部分をリロードする代わりに、次のことを行うことができます。

<a class="favourite" data-linkid="link123" href="mylink.php">My Link</a>

// Ensure your page has finished loading aka: 'ready' (almost always)
$(document).ready(function() {

    // Listen for the click event
    $('.favourite').on('click', favoriteLink);

    // On the click - post the update via ajax and update your interface
    function favoriteLink(event) {
        event.preventDefault();

        // Lets get the link id from our data attribute
        var favourite_link = $(this).data('linkid');

        // Post that information via ajax
        $.post('ajax_handler.html', { link : favourite_link }, function(data) {

            // And finally do something with the result!
            $('.result').html(data);
        });
}
于 2012-09-14T19:30:15.517 に答える
2

私の推測では、これは AJAX の非同期性と関係があると思われます。一部のブラウザーは、新しいリンクが読み込まれる前に AJAX を適切に起動しています。ページが変更されているため、他のユーザーが AJAX 要求をキャンセルしている可能性があります。アンカーのデフォルト アクションを防止しwindow.locationてから、ajax 呼び出しが返された後にそれらをリダイレクトするために使用します。

$("#hdr li a").click(function (e) {
    var href = $(this).attr('href');
    e.preventDefault()
    $.post("clear.php", function () {
        window.location = href;
    });
});
于 2012-09-14T19:25:51.783 に答える
0

ajax 呼び出しを実行しているため、訪問者は clear.php ページにアクセスできません。

代わりに、ブラウザが XMLHTTPRequest オブジェクトを使用して javascript を介してリクエストを送信し、ブラウザの動作を壊さず、a href が指すページをロードします。

言ったように:ajax呼び出しは役に立たない。ページの上に clear.php を含めて、たとえば get param に基づいて、セッション変数を設定する必要があるかどうかをテストすることをお勧めします。

ブラウザーが新しいページに到達する前に ajax 呼び出しを保持したい場合は、「リセット」リンクの最初の共通の親にイベント ハンドラーをアタッチし (イベント委任)、クリアに通知するために ajax 要求を送信する必要があるかどうかをテストできます。 .php

于 2012-09-14T19:40:38.590 に答える
0

この問題がありました。ユーザーがクリックしたリンクに応じてテーブルから異なる行を選択するために別の SQL 文字列を渡したかったのですが、GET で SQL を表示したくありませんでした。

私の解決策は、リンクごとに異なるセッション変数を設定し、リンクからセッション変数の名前を渡すことでした。いくつかのリンクがありましたが、例としてここに 2 つだけ含めました。リンクの私のコードは次のとおりです。

<?php $_SESSION["extend_stats_sql_01"] = "";                                  
echo '<a href="view_stats_1.php?sort=name&sent=extend_stats_sql_01"> View</a>';}?> <br> 

<?php $_SESSION["extend_stats_sql_02"] = " Where booking_status = 'Cancelled'";                               
echo '<a href="view_stats_1.php?sort=name&sent=extend_stats_sql_02"> View</a>';}?> <br> 

リンクに応じて正しいSQLでリストを表示するために次のページで値を取得する私のコードは次のとおりでした:-

$stats_sql = "SELECT id, name, activity, email, diving_date, arrival_date, checkin_date, create_date, seller FROM guests ";
$sort = $_GET['sort']; 
$sent= $_GET['sent'];
$result = $_SESSION["$sent"];
$stats_sql.= "$result"; 
$stats_sql.= " ORDER BY $sort"; 

明らかに、各ページの先頭でセッションを開始する必要があります:-

session_start(); 

終了したら:-

// remove all session variables
session_unset();

// destroy the session
session_destroy(); 
于 2019-07-21T13:30:59.520 に答える