代码会自动循环2次,很奇怪

#1 278086346

QQ截图20170407121736.jpg
代码是这样,我只点击了一次,的确运行一次,然后过几秒后,他自动又运行了一次代码,默默在后台运行的,很奇怪。请问JAKE这是什么情况?

2017-04-07 12:19:36

#2 278086346

QQ截图20170407122026.jpg
前台是这样,我的确只点击了一次,只提示一次成功,但是他会把这个function运行2次,第一次正常提示,第二次后台默默运行一次,哪里出错了?

2017-04-07 12:22:09

#3 278086346

测试了好久,调试,删除代码一步一步来,incrField,decrField无关,是这段代码重复运行一次

2017-04-07 14:55:58

#4 jake

首先,框架是不会跑两次的,这点开源代码可以查的。

我自己遇到过同样的问题,有以下两种情况最常见,都是伪静态引起的。

1. 页面里面有引用程序生成的JS,但JS已经404。但是浏览器还是会请求一遍你的程序。
2. 浏览器会默认访问一个网站的/favicon.ico文件,作为图标,如果你的网站没有这ico,可能由于伪静态的关系,也会跑一趟你的程序。

以上两种情况,都会导致程序被跑两次。

要证明这情况,你可以在你说的两种情况下面,分别输出点不同的东西,然后浏览器测试的时候,观察全部network的返回,看看两种情况输出的东西能否搜索得到,那就能知道在那儿跑了第二次页面了。

2017-04-07 14:59:29

#5 278086346

jake 发表于 2017-4-7 14:59
首先,框架是不会跑两次的,这点开源代码可以查的。

我自己遇到过同样的问题,有以下两种情况最常见,都是 ...
JS那个我查看了当前页面,这些JS都可以访问。
ICO我也在根目录下加了一个,还是存在这个问题
而且我没有开启伪静态哦。。。
问题还是没有解决,请问还有什么方法至少可以先找出问题吗

2017-04-07 16:12:25

#6 jake

这样的情况那只能拆代码逻辑来检查了,一般重复跑的情况也可以这样做的。

比如说把你if else里面的东西,if 拆到一个function,else 拆到一个function,如果有可能的话,拆成两个页面会更好,这样应该可以看出问题。

2017-04-07 16:33:19

#7 278086346

jake 发表于 2017-4-7 16:33
这样的情况那只能拆代码逻辑来检查了,一般重复跑的情况也可以这样做的。

比如说把你if else里面的东西,i ...
我查了网上,好多说浏览器有关,或者说A标签会这样。于是我把链接直接打到地址栏,还是会出现这种情况,是否能说明问题是出现在后端?
function里面的if ,else我全部去掉,最后整个function里面我只有3句代码,就是增加减少,居然还出现2次。。。

2017-04-07 16:48:16

#8 jake

那试试最精简,action就输出个helloworld,写个随机文件名的空文件到本地(证明执行次数),然后就exit()掉,估计就没法执行两次了吧。

2017-04-07 17:20:59

#9 278086346

jake 发表于 2017-4-7 16:33
这样的情况那只能拆代码逻辑来检查了,一般重复跑的情况也可以这样做的。

比如说把你if else里面的东西,i ...
  //判断用户是否已关注
                $openidsa=$a['openid'];$token=$a['token'];         
                $urlaassa='https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$token.'&openid='.$openidsa.'';
                $htmlaasdws = json_decode(file_get_contents($urlaassa));
                     //打印用户信息
                        function object_array($arraya){
                                if(is_object($arraya)){
                                $arraya = (array)$arraya;
                                }
                                if(is_array($arraya)){
                                foreach($arraya as $key=>$value){
                                $arraya[$key] = object_array($value);
                                }
                                }
                                return $arraya;
                        }

                $arrayaasb = object_array($htmlaasdws);
        $guanzhu=$arrayaasb['subscribe'];  //获取是否关注,$guanzhu等于1就是关注了,0就是未关注
最后发现,是这一段微信官方接口出现的问题,我删除这个就没有问题,还在研究。。。JAKE看出哪里问题吗

2017-04-07 17:21:19

#10 278086346

jake 发表于 2017-4-7 17:20
那试试最精简,action就输出个helloworld,写个随机文件名的空文件到本地(证明执行次数),然后就exit()掉 ...
最后得出结论,用A标签会加载两次,用form就不会,我在想想怎么办,谢谢JAKE

2017-04-07 18:12:36

#11 278086346

jake 发表于 2017-4-7 17:20
那试试最精简,action就输出个helloworld,写个随机文件名的空文件到本地(证明执行次数),然后就exit()掉 ...
QQ截图20170408134300.jpg
<{spUrl c=main a=votemin user_gonhao=$smarty.session.userinfo.user_gonhao openid=$smarty.session.openid token=$smarty.session.access_token id=$value['ct_id']}>  

user_gonhao=$smarty.session.userinfo.user_gonhao   token=$smarty.session.access_token   只要有这两句话,就会加载两次,百思不得其解。。。。jake 这个session会导致这样吗?

2017-04-08 13:46:03

#12 熊家湾的孩子

开启了浏览器的预加载功能导致的吧。鼠标移到A标签浏览器会预加载这个连接,提前访问了一次,你再点开又访问了一次。

2017-04-08 16:58:30

#13 熊家湾的孩子

正好也符合你的情况,预加载只加载A标签,不加载form

2017-04-08 16:59:59

#14 jake

熊家湾的孩子 发表于 2017-4-8 16:58
开启了浏览器的预加载功能导致的吧。鼠标移到A标签浏览器会预加载这个连接,提前访问了一次,你再点开又访 ...
比较赞同这个,有试过换个浏览器吗?

搜狗浏览器是会有所谓的预加载,是强制功能。

2017-04-08 22:09:59

#15 278086346

熊家湾的孩子 发表于 2017-4-8 16:58
开启了浏览器的预加载功能导致的吧。鼠标移到A标签浏览器会预加载这个连接,提前访问了一次,你再点开又访 ...
用了360浏览器,IE,谷歌,这三个,都会出现同样情况,包括手机的微信浏览器和QQ浏览器,都有这些情况。
   没有开启这个功能。目前只能用form,暂时未找到使用A标签的解决方案。。。

2017-04-16 13:41:33

#16 278086346

熊家湾的孩子 发表于 2017-4-8 16:58
开启了浏览器的预加载功能导致的吧。鼠标移到A标签浏览器会预加载这个连接,提前访问了一次,你再点开又访 ...
并且不是移动上去会加载,而是点击后,才运行一次,然后不做任何操作,几秒后又默认后台运行了一次。  移上去是没有任何运行的

2017-04-16 13:43:19

#17 jake

278086346 发表于 2017-4-7 17:21
最后发现,是这一段微信官方接口出现的问题,我删除这个就没有问题,还在研究。。。JAKE看出哪里问题吗
...
之前这两个回复,被论坛的关键字屏蔽给拦下来了,现在才看到。

如果是这块有问题,或者有可能是因为WX请求之前,会有可能有回调,这个回调造成二次运行的错觉把。

2017-04-16 21:54:23

#18 sp_lin

Token应该会重复请求

2018-03-02 09:30:13