0

記事が読まれる回数を増やす必要がある状況があります。誰かが記事を開くと、読み取り数を 1 ずつ増やしてデータベースに反映する必要があります。単純。

サーバーに POST リクエストを送信すると、読み取り回数が 1 つ増えます。問題の記事は、URL パラメーターを介して提供されます。

ブラウザに URL を入力して手動で行うと、期待どおりに機能します。したがって、サーバー側に問題はありません。

私の問題は、JavaScript側またはjqueryから始まります。イベントを記事リンクにフックします。したがって、ユーザーが記事のリンクをクリックするたびに、次のように読み取り数が増加します。

$('#list-articles .article-link').click(function(e){
  var oid = $(this).parent().parent().attr('data-oid').toString(); //Get the article id
  $.post( "/articles/viewed/" + oid );
});

今、これはうまくいきません!数は増えません。

実際に記事を開いて表示するにはリンクが必要なので、デフォルトのアクションを妨げません。

ここで、次のように投稿の直後にアラートを配置すると:

$('#list-articles .article-link').click(function(e){
  var oid = $(this).parent().parent().attr('data-oid').toString(); //Get the article id
  $.post( "/articles/viewed/" + oid );
  alert(oid);
});

このバリアントは機能します。アラート ウィンドウを閉じると、数字が増えます。どうしてこうなの??アラート イベントが存在しなくても実際に動作するように修正するにはどうすればよいですか?

アップデート

この問題の解決にご協力いただきありがとうございます。すべての答えは素晴らしく、何らかの形で役立ちます。これまでのところ機能する唯一のバリアントは、ajax 呼び出しで非同期を無効にすることです。ajaxで非同期モードをオフに切り替える理由を誰かが詳しく説明できれば素晴らしいと思います。元の投稿リクエストは実行されなかったのですか?単にチェックが早すぎて、ページの読み込み時に数値の増加が表示されなかった場合は、次のページのリロード時に表示されるはずですよね? データベースでまったく更新されなかったので、投稿がまったく実行されなかったと思います。これはなぜですか?二度とこの問題に巻き込まれないように、問題を理解したいと思います。ありがとう。

4

2 に答える 2

1

あなたの問題は$.post非同期であることが原因である可能性があり、これをチェックするのが早すぎて同期的に投稿しようとしています:

$.ajax({
    type: 'POST',
    url: "/articles/viewed/" + oid,
    async:false
});
于 2013-11-10T09:40:27.460 に答える
0

デフォルトを防止します。記事の読み取り数を 1 ずつ増やすことに成功したというサーバーからの応答を待ってから、記事にリダイレクトします。

アラートが適切に機能する場合、競合状態のように聞こえます。

于 2013-11-10T09:36:58.520 に答える