超业余选手请教一个 ajax 更新数据库问题,谢谢 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
nothing2

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

  •  
  •   nothing2 Mar 13, 2018 2291 views
    This topic created in 2972 days ago, the information mentioned may be changed or developed.

    说明 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,即数据库中仍然标记为未读

    求指教,非常感谢。

    Supplement 1    Mar 13, 2018

    修改了几处代码,目前看起来是正常了。感谢回复的各位。

    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; }); 
    13 replies    2018-03-13 19:19:21 +08:00
    manhere
        1
    manhere  
       Mar 13, 2018 via Android
    一个页面里不要有重复的 id
    MeteorCat
        2
    MeteorCat  
       Mar 13, 2018 via Android
    什么时候 html 标签能够多个同名 id 了?
    lhx2008
        3
    lhx2008  
       Mar 13, 2018 via Android
    重复标签用 class,否则用 id 只会绑定到第一个元素上面
    naver1
        4
    naver1  
       Mar 13, 2018
    楼上说的对,但是跟楼主出现的问题没什么关系好像。
    点击的时候看下浏览器发开者工具里的控制台还有网络面板,看看请求有没有什么问题,是没请求,还是请求失败。
    另外 ajax 里的 success 跟 error 加上便于调试。
    nothing2
        5
    nothing2  
    OP
       Mar 13, 2018
    @manhere #1
    @MeteorCat #2
    @lhx2008 #3

    谢谢,我马上调整
    Troevil
        6
    Troevil  
       Mar 13, 2018
    你点击链接之后,ajax 请求是异步的,可能还未发出去,但是页面跳转出去了啊,当次请求就被扔掉了当然会出现更新失败了
    U7Q5tLAex2FI0o0g
        7
    U7Q5tLAex2FI0o0g  
       Mar 13, 2018
    6 楼说的对。可能 ajax 还没发送成功,a 链接就跳转了。稳妥一点的话,就在 ajax 返回后再用 js 手动跳转,但这样感觉不是很合理
    jasonyang9
        8
    jasonyang9  
       Mar 13, 2018
    $.ajax 加一个 async: true 试试
    chairuosen
        9
    chairuosen  
       Mar 13, 2018
    还有一个逻辑层的问题,已读状态和取文章是一件事,你分两个渠道来做就有不同步的风险。应该是在取文章的时候在服务端把已读标记置为 1。
    summerwar
        10
    summerwar  
       Mar 13, 2018
    如果打开的新闻链接是本站内的,那么就在阅读页面 ajax 将状态调整为已读; 如果是外部站点,就先拦截跳转,等更新完状态之后,在 ajax 里跳转至外部页面地址
    jasonyang9
        11
    jasonyang9  
       Mar 13, 2018
    @jasonyang9 写反了,那是 async: false
    nothing2
        12
    nothing2  
    OP
       Mar 13, 2018 via iPhone
    @summerwar 是站外链接,能给一下示例代码么?或者参考链接,谢谢
    Telegram
        13
    Telegram  
       Mar 13, 2018 via iPhone
    @littleylv #7 那有时候网络慢的时候,ajax 没返回成功,点链接都不会跳转了,还不如把 ajax 写到文章页面里,某个文章打开了,才 ajax 标记
    About     Help     Advertise     Blog     API     FAQ     Solana     2458 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 103ms UTC 11:55 PVG 19:55 LAX 04:55 JFK 07:55
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86