设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3461|回复: 3
打印 上一主题 下一主题

[有事请教] 请问在javascript中alert函数的运行机制是怎样的?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2666
在线时间
384 小时
注册时间
2015-8-8
帖子
437

R考场第七期纪念奖

跳转到指定楼层
1
发表于 2018-10-28 19:50:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
如果在脚本中使用
  1. var xmlhttp=new XMLHttpRequest();
  2.    xmlhttp.onreadystatechange=function(){
  3.     $gameVariables.setValue(1, xmlhttp.responseText);}

  4. xmlhttp.open("GET","https://www.lengjunyi.work/rpgmaker/Get_Score.php/");
  5. xmlhttp.send();
复制代码


可以很轻松的得到网页内容,
可是如果加入一行alert,


  1. var xmlhttp=new XMLHttpRequest();
  2.    xmlhttp.onreadystatechange=function(){
  3.     $gameVariables.setValue(1, xmlhttp.responseText);}
  4.      alert(xmlhttp.responseText)
  5. xmlhttp.open("GET","https://www.lengjunyi.work/rpgmaker/Get_Score.php/");
  6. xmlhttp.send();
复制代码

就没有办法了。
请问为什么呢?
旧作《邵彦朝的大冒险》下载

默默无闻的论坛观察者

Lv5.捕梦者

梦石
0
星屑
32026
在线时间
5081 小时
注册时间
2012-11-19
帖子
4877

开拓者

2
发表于 2018-10-29 08:27:51 | 只看该作者
没空解释为什么没作用。
但是你可以把 alert 放到 onreadystatechange 函数里试试。
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3404
在线时间
461 小时
注册时间
2013-12-7
帖子
333
3
发表于 2018-10-29 14:22:39 | 只看该作者
本帖最后由 ekmomo 于 2018-10-29 14:35 编辑

一、网络请求分为同步(阻塞模式)和异步(非阻塞模式),简单的说:
同步:在获得网络请求结果前,解释器不能执行任何代码。
异步: 获得网络请求前解释器仍然可以执行接下来的代码。

默认使用异步方式的情况下,alert一般会在网络请求返回数据之前就执行。这个时候alert的内容显然是取不到值的。

二、解决方法:
你把alert 放到onreadystatechange 内部,并且使用readyState及status来约束onreadystatechange事件。
如:if (xmlhttp.readyState==4 && xmlhttp.status==200) alert(xxx);

或者更简单的在open()最后加上第三个参数false即可改为同步请求。
改为同步请求的同时你应当把alert()写在send()的后面,并且建议使用send(null)代替send(),这样更符合规范。

三、onreadystatechange 和同步请求的区别
onreadystatechange的本质是监听readyState 的一个事件,每当readyState发生改变的时候,它会执行自己函数体。
理论上它应当使用异步处理,其优势是其他的脚本依然保持会运行。
改为同步请求后,最直观的就是,如果网络状况不好,你的游戏会一直处于一个未响应的状态,直到结果返回。
同步请求也有自己的好处,因为它完全阻塞了代码的运行,所以最大程度上避免了不可预知的错误。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
161
在线时间
40 小时
注册时间
2014-6-21
帖子
89
4
发表于 2018-11-7 15:02:14 | 只看该作者
我更好奇为什么alert怎么会让游戏跳出全屏
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-8 05:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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