我有一种情况需要增加阅读文章的时间。 一旦某人打开文章,它应该通过将读取次数增加一来反映在数据库中。简单。
向服务器发送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中关闭异步模式来修复它会很棒。那么原始的帖子请求从未执行过?如果我只是过早检查并且在页面加载时数量增加不可见,那么它应该在下一页重新加载时仍然可见,对吗?它根本没有在数据库上更新我认为帖子根本没有运行。为什么会这样?我想了解这个问题所以我不会再遇到这个问题。感谢。
答案 0 :(得分:1)
您的问题可能是由于$.post
异步,您过早检查并尝试同步发布:
$.ajax({
type: 'POST',
url: "/articles/viewed/" + oid,
async:false
});
答案 1 :(得分:0)
防止默认。等待服务器的响应,说文章读取增加1成功,然后重定向到文章。
如果它适用于警报,则听起来像是竞争条件。