
说明 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,即数据库中仍然标记为未读
求指教,非常感谢。
修改了几处代码,目前看起来是正常了。感谢回复的各位。
1、修改新闻条目列表
<li><a href="url1" itemid="rowid1">title1</a></li> <li><a href="url2" itemid="rowid2">title2</a></li> 2、修改ajax
$("a").click(function(){ var itemid = $(this).attr("itemid"); var itemurl = $(this).attr("href"); $.ajax({ url: "go.php", type: "post", async: false, data: {"id": itemid} }); window.location.href = itemurl; return false; }); 1 manhere Mar 13, 2018 via Android 一个页面里不要有重复的 id |
2 MeteorCat Mar 13, 2018 via Android 什么时候 html 标签能够多个同名 id 了? |
3 lhx2008 Mar 13, 2018 via Android 重复标签用 class,否则用 id 只会绑定到第一个元素上面 |
4 naver1 Mar 13, 2018 楼上说的对,但是跟楼主出现的问题没什么关系好像。 点击的时候看下浏览器发开者工具里的控制台还有网络面板,看看请求有没有什么问题,是没请求,还是请求失败。 另外 ajax 里的 success 跟 error 加上便于调试。 |
6 Troevil Mar 13, 2018 你点击链接之后,ajax 请求是异步的,可能还未发出去,但是页面跳转出去了啊,当次请求就被扔掉了当然会出现更新失败了 |
7 U7Q5tLAex2FI0o0g Mar 13, 2018 6 楼说的对。可能 ajax 还没发送成功,a 链接就跳转了。稳妥一点的话,就在 ajax 返回后再用 js 手动跳转,但这样感觉不是很合理 |
8 $.ajax 加一个 async: true 试试 |
9 chairuosen Mar 13, 2018 还有一个逻辑层的问题,已读状态和取文章是一件事,你分两个渠道来做就有不同步的风险。应该是在取文章的时候在服务端把已读标记置为 1。 |
10 summerwar Mar 13, 2018 如果打开的新闻链接是本站内的,那么就在阅读页面 ajax 将状态调整为已读; 如果是外部站点,就先拦截跳转,等更新完状态之后,在 ajax 里跳转至外部页面地址 |
11 jasonyang9 Mar 13, 2018 @jasonyang9 写反了,那是 async: false |