超业余选手请教一个 ajax 更新数据库问题,谢谢

2018-03-13 07:48:10 +08:00
 nothing2

说明 1:sqlite 数据库中保存有一些新闻条目,表结构为 rowid | title | url | mark,分别表示 id、标题、链接、已读标志,其中已读标志 0 表示未读,1 为已读;

说明 2:用 php 从数据库中读取 mark=0 的条目,用 while 循环拼凑为

<li><a href="url1" id="go" itemid="rowid1">title1</a></li>
<li><a href="url2" id="go" itemid="rowid2">title2</a></li>

说明 3:我的需求是:点击某条新闻链接后,更新数据库中该条目的 mark=1

说明 4:东拼西凑了一个脚本

<script src="path/to/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
	$("a#go").click(function(){
		var itemid = $(this).attr("itemid");
		$.ajax({
			url: "go.php",
			type: "post",
			data: {id: itemid}
		});
	});
});
</script>

其中 go.php 是 update 数据库

$id = $_REQUEST["id"];
$sql = 'UPDATE "table" SET "mark" = 1 WHERE "rowid" = '.$id;

现在的问题是:点击链接后,有一定的概率不能更新 mark,即数据库中仍然标记为未读

求指教,非常感谢。

1828 次点击
所在节点    问与答
13 条回复
manhere
2018-03-13 08:07:24 +08:00
一个页面里不要有重复的 id
MeteorCat
2018-03-13 08:09:16 +08:00
什么时候 html 标签能够多个同名 id 了?
lhx2008
2018-03-13 08:13:22 +08:00
重复标签用 class,否则用 id 只会绑定到第一个元素上面
DT27
2018-03-13 08:15:49 +08:00
楼上说的对,但是跟楼主出现的问题没什么关系好像。
点击的时候看下浏览器发开者工具里的控制台还有网络面板,看看请求有没有什么问题,是没请求,还是请求失败。
另外 ajax 里的 success 跟 error 加上便于调试。
nothing2
2018-03-13 08:15:53 +08:00
@manhere #1
@MeteorCat #2
@lhx2008 #3

谢谢,我马上调整
Troevil
2018-03-13 09:02:17 +08:00
你点击链接之后,ajax 请求是异步的,可能还未发出去,但是页面跳转出去了啊,当次请求就被扔掉了当然会出现更新失败了
littleylv
2018-03-13 09:11:56 +08:00
6 楼说的对。可能 ajax 还没发送成功,a 链接就跳转了。稳妥一点的话,就在 ajax 返回后再用 js 手动跳转,但这样感觉不是很合理
jasonyang9
2018-03-13 09:15:30 +08:00
$.ajax 加一个 async: true 试试
chairuosen
2018-03-13 09:26:48 +08:00
还有一个逻辑层的问题,已读状态和取文章是一件事,你分两个渠道来做就有不同步的风险。应该是在取文章的时候在服务端把已读标记置为 1。
summerwar
2018-03-13 10:48:41 +08:00
如果打开的新闻链接是本站内的,那么就在阅读页面 ajax 将状态调整为已读; 如果是外部站点,就先拦截跳转,等更新完状态之后,在 ajax 里跳转至外部页面地址
jasonyang9
2018-03-13 11:11:33 +08:00
@jasonyang9 写反了,那是 async: false
nothing2
2018-03-13 11:31:22 +08:00
@summerwar 是站外链接,能给一下示例代码么?或者参考链接,谢谢
Telegram
2018-03-13 19:19:21 +08:00
@littleylv #7 那有时候网络慢的时候,ajax 没返回成功,点链接都不会跳转了,还不如把 ajax 写到文章页面里,某个文章打开了,才 ajax 标记

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/437468

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX