1

jQueryの$.postメソッドを使用して、特定の要素がクリックされるたびにajaxリクエストをPHPスクリプトに送信しようとしています。サーバーから返される値は気にしません。データが送信されていることを確認したいだけです。

ただし、クリックを受け取る要素には、ハイパーリンクされた画像または複数のリンクを含むフラッシュ要素が含まれている可能性があります。ユーザーがページから移動した場合でも、スクリプトがPOSTリクエストを確実に受信できるようにするにはどうすればよいですか(ここでも、その応答は気にしません)。私は以下のコードを使用しています:

jQuery(document).ready(function($) {
    $(".click-track").mousedown(function(e) { // click() will not pass through a flash movie, so we must use mousedown
        ad_id = $(this).data("ad-id");
        var data = {
            action: 'log_click',
            adId: ad_id
        };
        $.ajaxSetup({async: false});
        $.post(myscript.php, data, function(data) {
            // Do nothing because we don't care about the response
        }, 'html');
    });
});

私はブラウザスクリプトの第一人者ではありません。このコードは私を混乱させます。私はあなたが与えることができるどんな助けにも感謝します!

4

3 に答える 3

1

Javascript でリダイレクトを処理し、応答を受け取った後にリダイレクトを実行します。また、おそらく AJAX は必要ありません。おそらく同期投稿が必要です。

于 2012-04-30T21:38:47.290 に答える
1

mousedown ハンドラー内で e.preventDefault() を実行する場合、$.post 呼び出し内で簡単に実行できます。

$(".click-track").mousedown(function(e) { // click() will not pass through a flash movie, so we must use mousedown
    e.preventDefault();
    ad_id = $(this).data("ad-id");
    var data = {
        action: 'log_click',
        adId: ad_id
    };
    $.ajaxSetup({async: false});
    var jqxhr = $.post(myscript.php, data, function(data) {
        // Do nothing because we don't care about the response

    }, 'html');
    jqxhr.complete(function(){ $(this).trigger('click'); });
});

これにより、ajax オブジェクトが作成され、POST リクエストが完了したときに関数がアタッチされ、最初に mousedown された要素のクリックがトリガーされます。Flash オブジェクトで動作するかどうかはわかりませんが、動作するはずです。

于 2012-04-30T21:50:36.047 に答える
0

投稿が完了するまでコードを強制的にブロックする場合は、代わりに .ajax() を使用し、async フィールドを false に設定することをお勧めします。そのようです:

$.ajax({
 //some fields
 async:false,
 //some more fields
});

これで、呼び出しが戻るまで js がブロックされます。警告しますが、これは好ましくありません。

編集: 要素がハイパーリンクの場合、event.preventDefault() を呼び出す必要があります。リンクの href 属性を「javascript:void(0);」に設定することも価値があります。

于 2012-04-30T22:30:15.870 に答える