[原创]警惕:javascript的异步调用
开发网页的时候有时候会遇到类似问题 看自己的js写的明明没有问题
但是事实上却报错
通过showCount.htm显示从getCount.aspx页面传过来的数据
数据页
数据显示页 运行后
显示为:
并且提示错误错误:
messageCount is not defined
messageCount没有定义
但是事实上这个变量messageCount 在head里面已经定义过了的
只不过现在取不到而已
为什么会发生这种情况呢
因为浏览器是异步调用文件的
因为浏览器一般是先按顺序读取文件
在执行getCount.aspx的同时继续向下读取文件
这2者是异步进行的
当执行到下面这步时
document.getElementById("Text2").value = messageCount; // 将messageCount赋给Text2
有可能getCount.aspx里的messageCount可能还没有被执行
所以就会出这种问题
那么该如何从其他页面取数据呢?
最好的解决办法就是在提供数据的页面提供调用数据的接口
在原有的数据页面里加上一下这段
同时在原有页面里去掉一段
经过这样修改程序就完成了在运行时就会显示
一般来说这种错误在本地是很少见的
因为本地取数据够快
在执行到后面的一段javascript的时候前面的一段javascript已经完成
所以不会出什么问题
但是如果是发布到网上
而取数据的那段是从数据库中取数据
而且加上网络质量不好的话
那么很有可能出现这种情况
但是事实上却报错
通过showCount.htm显示从getCount.aspx页面传过来的数据
数据页
数据显示页 运行后
显示为:
并且提示错误错误:
messageCount is not defined
messageCount没有定义
但是事实上这个变量messageCount 在head里面已经定义过了的
只不过现在取不到而已
为什么会发生这种情况呢
因为浏览器是异步调用文件的
因为浏览器一般是先按顺序读取文件
在执行getCount.aspx的同时继续向下读取文件
这2者是异步进行的
当执行到下面这步时
document.getElementById("Text2").value = messageCount; // 将messageCount赋给Text2
有可能getCount.aspx里的messageCount可能还没有被执行
所以就会出这种问题
那么该如何从其他页面取数据呢?
最好的解决办法就是在提供数据的页面提供调用数据的接口
在原有的数据页面里加上一下这段
同时在原有页面里去掉一段
经过这样修改程序就完成了在运行时就会显示
一般来说这种错误在本地是很少见的
因为本地取数据够快
在执行到后面的一段javascript的时候前面的一段javascript已经完成
所以不会出什么问题
但是如果是发布到网上
而取数据的那段是从数据库中取数据
而且加上网络质量不好的话
那么很有可能出现这种情况