请选择 进入手机版 | 继续访问电脑版

SpeedPHP框架

 找回密码
 注册成为新用户

QQ登录

只需一步,快速开始

查看: 1212|回复: 16

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

[复制链接]
发表于 2017-4-7 12:19:36 | 显示全部楼层 |阅读模式

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为新用户

x
 楼主| 发表于 2017-4-7 12:22:09 | 显示全部楼层

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为新用户

x
 楼主| 发表于 2017-4-7 14:55:58 | 显示全部楼层
测试了好久,调试,删除代码一步一步来,incrField,decrField无关,是这段代码重复运行一次
发表于 2017-4-7 14:59:29 | 显示全部楼层
首先,框架是不会跑两次的,这点开源代码可以查的。

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

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

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

要证明这情况,你可以在你说的两种情况下面,分别输出点不同的东西,然后浏览器测试的时候,观察全部network的返回,看看两种情况输出的东西能否搜索得到,那就能知道在那儿跑了第二次页面了。
 楼主| 发表于 2017-4-7 16:12:25 | 显示全部楼层
jake 发表于 2017-4-7 14:59
首先,框架是不会跑两次的,这点开源代码可以查的。

我自己遇到过同样的问题,有以下两种情况最常见,都是 ...

JS那个我查看了当前页面,这些JS都可以访问。
ICO我也在根目录下加了一个,还是存在这个问题
而且我没有开启伪静态哦。。。
问题还是没有解决,请问还有什么方法至少可以先找出问题吗
发表于 2017-4-7 16:33:19 | 显示全部楼层
这样的情况那只能拆代码逻辑来检查了,一般重复跑的情况也可以这样做的。

比如说把你if else里面的东西,if 拆到一个function,else 拆到一个function,如果有可能的话,拆成两个页面会更好,这样应该可以看出问题。
 楼主| 发表于 2017-4-7 16:48:16 | 显示全部楼层
jake 发表于 2017-4-7 16:33
这样的情况那只能拆代码逻辑来检查了,一般重复跑的情况也可以这样做的。

比如说把你if else里面的东西,i ...

我查了网上,好多说浏览器有关,或者说A标签会这样。于是我把链接直接打到地址栏,还是会出现这种情况,是否能说明问题是出现在后端?
function里面的if ,else我全部去掉,最后整个function里面我只有3句代码,就是增加减少,居然还出现2次。。。
发表于 2017-4-7 17:20:59 | 显示全部楼层
那试试最精简,action就输出个helloworld,写个随机文件名的空文件到本地(证明执行次数),然后就exit()掉,估计就没法执行两次了吧。
 楼主| 发表于 2017-4-7 17:21:19 | 显示全部楼层
jake 发表于 2017-4-7 16:33
这样的情况那只能拆代码逻辑来检查了,一般重复跑的情况也可以这样做的。

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

  17.                 $arrayaasb = object_array($htmlaasdws);
  18.         $guanzhu=$arrayaasb['subscribe'];  //获取是否关注,$guanzhu等于1就是关注了,0就是未关注
复制代码
最后发现,是这一段微信官方接口出现的问题,我删除这个就没有问题,还在研究。。。JAKE看出哪里问题吗
 楼主| 发表于 2017-4-7 18:12:36 | 显示全部楼层
jake 发表于 2017-4-7 17:20
那试试最精简,action就输出个helloworld,写个随机文件名的空文件到本地(证明执行次数),然后就exit()掉 ...

最后得出结论,用A标签会加载两次,用form就不会,我在想想怎么办,谢谢JAKE
您需要登录后才可以回帖 登录 | 注册成为新用户

本版积分规则

手机浏览|简版|中文PHP框架|开源协议|SpeedPHP.com ( 粤ICP备08008671号

GMT+8, 2017-10-19 11:42

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表