0

我有一种情况,我需要增加文章的阅读次数。一旦有人打开一篇文章,它应该通过将阅读次数增加一来反映在数据库中。简单的。

向服务器发送 POST 请求会使读取次数增加一。有问题的文章是通过 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 中关闭异步模式来修复它,那就太好了。那么原来的post请求从来没有被执行过?如果我只是检查得太早并且在页面加载时看不到数量增加,那么在下一页重新加载时应该仍然可见,对吗?因为它根本没有在数据库上更新,我认为该帖子根本没有运行。为什么会这样?我想了解这个问题,所以我不会再陷入这个问题。谢谢。

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 回答