javascript得先后次序问题以及Ajax

js单线程执行引起的setTimeout和ajax执行的迷之bug 问题描述:近期,在做倒计时动画时,用到了setTimeout()这个计时函数,在使用时,由于不太理解js的执行原理,光看函数的用法写出了一段代码,结果发现setTimeout的执行非常的迷,和自己想象的完全不同,行为可以用“诡异”来形容。同样的问题在我写一个ajax异步请求时,又遇到了一个神奇的执行次序,由这两个bug情景,我认识到了理解js执行原理的重要性。情景一:for(var i = 0;i... 阅读详情

虽然Javascript不区分先后次序,但是类似这样的语句

 

  var Cbo = new CallBackObject();
  Cbo.OnComplete 
= Cbo_Complete;
  Cbo.OnError 
= Cbo_Error;
  
var Status = -1;

必须放到调用的前面,在使用Ajax得时候可以修改便于扩展,

 

// JScript 文件

function CallBackObject()
{
  
this.XmlHttp = this.GetHttpObject();
}
 
CallBackObject.prototype.GetHttpObject 
= function()
{ 
  
var xmlhttp;
  
/*@cc_on
  @if (@_jscript_version >= 5)
    try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
        xmlhttp = false;
      }
    }
  @else
  xmlhttp = false;
  @end @
*/
  
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    
try {
      xmlhttp 
= new XMLHttpRequest();
    } 
catch (e) {
      xmlhttp 
= false;
    }
  }
  
return xmlhttp;
}
 
//CallBackObject.prototype.DoCallBack = function( Type,Err,Gold,Page,PageSize )
//
{
//
  if( this.XmlHttp )
//
  {
//
    if( this.XmlHttp.readyState == 4 || this.XmlHttp.readyState == 0 )
//
    {
//
      //var thePage = "../responseXml.asp?larCode=" + encodeURI( larCodeValue );
//
      var thePage = "DataHelper.aspx?actionID=11&Type="+ Type +"&Err="+Err+"&Gold="+Gold+"&Page="+Page+"&PageSize="+PageSize;
//
      alert( thePage );
//
      // xmlhttp.open("GET","../responseXml.asp?larCode=" + encodeURI( larCodeValue ),true);
//
      var oThis = this;
//
      this.XmlHttp.open('GET', thePage, false);
//
      this.XmlHttp.onreadystatechange = function(){ oThis.ReadyStateChange(); };
//
      //this.XmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
//
      this.XmlHttp.send(null);
//
    }
//
  }
//
}

CallBackObject.prototype.DoCallBack 
= function( PageUrl,CallBackFun )
{
  
//alert(PageUrl);
  if( this.XmlHttp )
  {
    
if( this.XmlHttp.readyState == 4 || this.XmlHttp.readyState == 0 )
    {
      
var oThis = this;
      
this.XmlHttp.open('GET', PageUrl, false);
      
this.XmlHttp.onreadystatechange = function(){ oThis.ReadyStateChange(CallBackFun); };
      
//this.XmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      this.XmlHttp.send(null);
    }
  }
}
 
CallBackObject.prototype.AbortCallBack 
= function()
{
  
if( this.XmlHttp )
    
this.XmlHttp.abort();
}
 
CallBackObject.prototype.OnLoading 
= function()
{
  
// Loading
}
 
CallBackObject.prototype.OnLoaded 
= function()
{
  
// Loaded
}
 
CallBackObject.prototype.OnInteractive 
= function()
{
  
// Interactive
}
 
CallBackObject.prototype.OnComplete 
= function(responseText, responseXml,CallBackFun)
{
  
// Complete
}
 
CallBackObject.prototype.OnAbort 
= function()
{
  
// Abort
  //alert("Error");
}
 
CallBackObject.prototype.OnError 
= function(status, statusText)
{
  
// Error
}
 
CallBackObject.prototype.ReadyStateChange 
= function(CallBackFun)
{
  
if( this.XmlHttp.readyState == 1 )
  {
    
this.OnLoading();
  }
  
else if( this.XmlHttp.readyState == 2 )
  {
    
this.OnLoaded();
  }
  
else if( this.XmlHttp.readyState == 3 )
  {
    
this.OnInteractive();
  }
  
else if( this.XmlHttp.readyState == 4 )
  {
    
if( this.XmlHttp.status == 0 )
      
this.OnAbort();
    
else if( this.XmlHttp.status == 200 && this.XmlHttp.statusText == "OK" )
      
this.OnComplete(this.XmlHttp.responseText, this.XmlHttp.responseXML,CallBackFun);
    
else
      
this.OnError(this.XmlHttp.status, this.XmlHttp.statusText, this.XmlHttp.responseText);   
  }
}

调用

 

 var Cbo = new CallBackObject();
            Cbo.OnComplete 
= Cbo_Complete;
            Cbo.OnError 
= Cbo_Error;
            
var Status = -1;
            
            
function GetProduct( SelectedIndex,Item )
            {
               
var ThePageUrl = "../Tools/ajax.aspx?Type=11&MatchID="+escape(ThisValue);
               
//alert( ThePageUrl );
               Status = 1;
               Cbo.DoCallBack(  ThePageUrl,Status  );
            } 

            
function Cbo_Complete(responseText, responseXML,CallBackFunType)
            {
               buildSubClass( 
"areaid",responseText );
            }

            
function Cbo_Error(status, statusText, responseText)
            {
                alert( statusText );
            }
            
            
function buildSubClass( id ,responseText )
            {  
                
var subObject =  document.getElementById( id );
                deleteAllOptions(subObject);
                
// 显示服务器返回的信息
                var Dom = new ActiveXObject("Microsoft.XMLDOM") //建立XMLDOM对象
                Dom.loadXML( responseText );
                
if(Dom.parseError.errorCode != 0) //检查是否发生获取数据时错误
                {
                  alert( 
"绑定小类信息时候错误."   );           
                  
//+ Dom.parseError.errorCode      
                }
                
else
                {
                    
var xnl = Dom.getElementsByTagName("Area");;
                    
var Info ="请选择所物品";
                    appendOption(subObject,
"0",Info )
                    
if( xnl != null )
                    {
                        
with( xnl )
                        {   
                            
for ( var i = 0; i < length; i++ )
                            {   
                               
if( xnl[i].text != "" )
                               {
                                     appendOption ( subObject, xnl[i].childNodes.item(
0).text, xnl[i].childNodes.item(1).text) ;
                               }
                            }
                        }
                    }
                    
else
                    {
                       alert(
"获取数据有错误。");
                    }
                    
delete(Dom);
                    
//var Back = Dom.documentElement.childNodes.item(0).text 
                    //alert( Dom.documentElement.childNodes.item(0).text );
                    //得到返回的XML数据,我这里假设处理程序只返回一行XML数据(一个节点)
                    //div_message.innerHTML = Back;
                    //return(Back) //函数返回数据.......................结束
                }
            }

            
function appendOption(selElm,strValue,strDisp)
            {
                
var newopt = document.createElement('OPTION');
                newopt.value 
= strValue;
                newopt.text 
= strDisp;
                selElm.options[selElm.options.length] 
= newopt;
                
return false;
            }
            
function deleteAllOptions(selElm)
            {  
                
// alert( selElm.options.length )
                if(  selElm.options.length > 0)
                {
                    
for(var i = selElm.options.length ; i >= 0 ; i--)
                    {
                      selElm.options[i] 
= null;
                    }
                    
return false;
                }
            }

 

其实这样的调用是很方便的,但是这只是客户端的,对于服务器端的我们还需要有服务器端的调用,所以我主张一个系统可以使用两个ajax框架,无论是服务器端的还是客户端的都能方便的写出很友好的程序.

RKNN3588——YOLOv8的PT模型转RKNN模型 1. 首先克隆rknn修改后的ultralytics版本项目到本地主要是修改了源码的ultralytics/nn/modules/head.py和ultralytics/engine/exporter.py两个文件。2. 使用修改后的ultralytics对pt模型进行模型转换,此处的format=rknn代表支持rknn后续的转换,而不是用onnx,一定要注意!!! 阅读详情

相关推荐

AWS-解析mysql binlog同步数据方案

虽然是公有云的鼻祖,AWS在某些产品的实现却太不给力;可能是习惯了阿里云喂到嘴边的感觉,AWS很多方案需要自己折腾,蛋疼!比如这里要讲的mysql数据同步方案。 阿里云产品DTS,点几下就OK了,AWS,只能通过插件安装、配置、调试、蹚坑……,具体就是用msk的debezium插件连接器。没见识过的一脸懵逼,下面说下配置步骤和一些注意的坑。

sdmei 1408

Ajax异步、同步问题——Ajax和JavaScript执行顺序

Ajax根据async进行区分同步和异步过程,当async=true异步,async=false为同步,ajax默认async为异步。异步:Ajax不会影响整个页面的加载,相当于和浏览器加载或者用户操作分开走,互不相干,体现在用户角度就是不会有什么卡顿的感觉仿佛无事发生。同步:那就与异步相反,Ajax和js加载处于同一条线上,就是在加载Ajax的时候,全部的过程都等停下来,也就是假死状态。

weixin_45108259的博客 1716

C++开发基础之掌握常用的三种异步编程模型

以上是三种常见的C++异步编程模型,每种模型都有其适用的场景和特点。根据具体需求,你可以选择合适的模型来进行异步编程。

dotnet研习社 2176

JS 要注意 ajax的異步執行次序

前兩天碰到JS 調用 ajax, 這其中ajax的異步執行次序我們要注意,不小心可能會得到意外的結果。例: //主函數:保存數據,其中調用子函數用于數據檢查 function SaveData() { if ($("#DataForm").valid()) { var overLapped = CheckIfPracticeOverLapped(); //注意這個子函數有 aj

segclliwf的博客 95

Python与Wind量化接口实战:从配置到数据提取全流程解析

本文详细解析了Python与Wind量化接口的实战应用,从环境配置到数据提取全流程。通过Anaconda管理Python环境,安装WindPy接口,实现历史行情、截面数据和实时行情的查询与优化。文章还提供了高级功能如批量查询、数据缓存策略及实战案例,帮助开发者高效构建量化分析框架。

omega的博客 1328

图像质量评估(5) -- 畸变(Distortion)

当图像中原本应该是直线的地方看起来发生了不自然的变形或扭曲时,我们称为图像畸变。有三种类型的镜头畸变:桶形畸变(后文使用英文barrel),枕形畸变(后文使用pincushion)和胡子畸变(后文使用英文wavef或mustache,这种畸变里包含了桶形畸变和枕形畸变)。有一个重要的点需要注意,根据透镜的类型以及透镜是否能够从相机中移除等条件不同,畸变会有不同的表现。 总的来说,旋转对称光学系统功能上会产生和物体几何相似的图形。但也有少数特殊的系统是例外,例如鱼眼镜头,这种镜头几何是故意设计为

vivo01的专栏 2万+

AJAX基础_ajax请求的五个步骤

AJAX即"Asynchronous Javascript And XML"(异步 javaScript和XML),是指一种创建交互式网页应用的网页开发技术。Ajax是一种浏览器通过js异步发起请求。局部更新页面的技术Ajax请求的局部更新,浏览器地址栏不会发生变化局部更新不会 舍弃原来页面的内容。

2401_89690114的博客 962

解密UFS Explorer:Drobo BeyondRAID数据恢复实战指南

本文详细介绍了使用UFS Explorer Professional Recovery软件中的Drobo BeyondRAID助手进行数据恢复的完整实战流程。当Drobo设备因BeyondRAID配置信息丢失而无法访问时,该工具能安全、只读地扫描硬盘,虚拟重建存储池,帮助用户找回宝贵数据。指南涵盖了从前期准备、硬盘选择、配置扫描到数据安全导出的每一步关键操作与常见问题解决方案。

weixin_29219539的博客 270

json和ajax简单面试题

JSON 的了解? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小 如:{"age":"12", "name":"back"} JSON字符串转换为JSON对象: var obj =eval('('+ str +')'); var obj = str.pa

SinceroTu的博客 1万+

【100%通过率】华为od统一考试B卷【贪吃蛇】Python 实现

贪吃蛇是一个经典游戏,蛇的身体由若干方格连接而成,身体随蛇头移动。蛇头触碰到食物时,蛇的长度会增加一格。蛇头和身体的任一方格或者游戏版图边界碰撞时,游戏结束。 下面让我们来完成贪吃蛇游戏的模拟。给定一个N*M的数组arr,代表N*M个方格组成的版图,贪吃蛇每次移动一个方格。若arr[i][j] == ‘H’,表示该方格为贪吃蛇的起始位置;若arr[i][j] == ‘F’,表示该方格为食物,若arr[i][j] == ‘E’,表示该方格为空格。贪吃蛇初始长度为1,初始移动方向为向左。

MISAYAONE的博客 1204

漏检率从23%降至1.3%:YOLOv8交通车辆计数与违章识别完整落地方案

本文分享了基于YOLOv8+ByteTrack的交通视频分析系统实战经验,针对车辆计数和违章识别两大核心功能,提出了完整的工程化解决方案。系统采用边缘计算架构,单张GTX 1660即可稳定处理8路1080P视频流,实现了白天98.7%、夜间96%以上的车辆计数准确率。文章详细剖析了交通视频分析的四大落地痛点,系统架构设计思路,以及遮挡处理、光照适应、多路并发等关键技术优化方案,重点介绍了车辆计数三重校验机制和三类违章识别的工程实现细节。通过ROI裁剪、TensorRT加速、动态抽帧等优化手段,显著提升了系统

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 340

js初化加载页面时ajax会调用两次的原因_小猿圈WEB前端面试题之AJAX面试题

金三银四已经过去了,你升值加薪了吗?你重新找工作了吗?你跳槽了吗?你面试的时候紧张了吗啊?你注意过面试管问你的问题了吗?小猿圈web前端讲师分享WEB前端面试题之AJAX面试题,希望对小伙伴们有所帮助。1,Ajax是什么? 如何创建一个Ajax?ajax是一种创建交互式网页的计算,ajax的全称:Asynchronous Javascript And XML。异步传输+js+xml。所谓异步,在这...

weixin_39802969的博客 283

【Go语言实战】(9) gRPC 实现一个简单微服务

文章目录写在前面1. 安装1.1 grpc1.2 proto1.3 protobuf2. 编写代码2.1 初始化项目2.2 编写proto2.3 编写服务端2.4 实现客户端3. 演示 写在前面 这一次我们用gRPC实现获取用户的信息 1. 安装 1.1 grpc grpc的安装直接go get即可 go get google.golang.org/grpc 1.2 proto 下载proto,我是下载这个的。 然后解压出来把bin目录放在直接放在系统变量当中 1.3 protobuf 我们在

面向生活编程 3272

Ajax同步和异步的区别?如何解决跨域问题?

有关ajax的同步异步问题: ajax方法有个属性async用于控制同步和异步,默认是true,即ajax请求默认是异步请求,有时项目中会用到AJAX同步,同步的概念是来源于OS中的概念,即不同进程为协同完成某项工作而在先后次序上做了调整,这一点是通过阻塞、唤醒等的方式,同步强调的是顺序性,异步则不存在这种顺序性。 同步(async值为true): 浏览器访问服务器发生的请求,用户可以看到页

zytyxz的博客 480

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

AJAX基础

AJAX基础应用AJAX请求什么是AJAX请求原生AJAX请求的示例Ajax同步异步的区别jQuery中的AJAX请求$.ajax方法.get方法和.get方法和.get方法和.post方法$.getJSON方法表单序列化 serialize()扩展:验证用户名是否可用 AJAX请求 什么是AJAX请求 AJAX即"Asynchronous Javascript And XML"(异步 javaScript和XML),是指一种创建交互式网页应用的网页开发技术。 Ajax是一种浏览器通过js异步发起

一个小小的码农 4482

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Ajax实现异步请求Demo

文章目录1、JSON2、Ajax3、@ResponseBody注解4、@RequestBody注解5、Demo16、Demo2 1、JSON 1、Json字符串的两种格式: JSON对象字符串格式:’{“key1”:“value1”,“key2”:“value2”}’ JSON数组字符串格式:’[value1,value2,value3,…]’ 2、JSON 与 JS 对象的关系: JSON 是 ...

你今天真好看呀 868

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

前端面试大全(Ajax篇——面试官这样问,你答得上来吗?)

前端面试大全(Ajax篇)

cai niaoyihao_的博客 2632

ajax异步按顺序执行,Javascript异步执行不按顺序解决方案

案例分析:比如执行懒加载时候,onscroll 事件触发多次事件时候会调用多次 ajax 回调事件,由于每个事件返回先后次序并不能保证和触发前一致,所以在数据响应返回后所添加的数据顺序就很在 push 到数组上顺序不一致。例子1:var res = [];function response(data) {res.push( data );}// ajax(..)是某个库中提供的某个Ajax函数aj...

weixin_32770697的博客 489

Javascript的运行时机

Javascript何时开始运行,是一个看起来简单,但其实比较复杂而重要的事情。它关系到: 页面的加载速度。 Javascript如果用来处理DOM/CSS,则需要处理先后次序和由之引起的依赖问题。 Javascript之间可能存在依赖。在一些复杂的页面中,某些Javasc

博客只是岁月的记录 970

js面试题(中)

JS延迟加载的方式有哪些? JS的延迟加载有助与提高页面的加载速度。defer和async、动态创建DOM方式(用得最多)、按需异步载入JSdefer:延迟脚本。立即下载,但延迟执行(延迟到整个页面都解析完毕后再运行),按照脚本出现的先后顺序执行。async:异步脚本。下载完立即执行,但不保证按照脚本出现的先后顺序执行。 同步和异步的区别...

weixin_34088838的博客 142

ajax 同步_ajax同步和异步的区别

一、同步访问和异步访问的区别,先从概念上区别:1、同步的概念应该是来自于操作系统中关于同步的概念。2、不同进程为协同完成某项工作而在先后次序上调整(通过阻塞,唤醒等方式)。同步强调的是顺序性,谁先谁后;异步则不存在这种顺序性。3、同步:浏览器访问服务器请求,用户看得到页面刷新,重新发请求,等请求完,页面刷新,新内容出现,用户看到新内容,进行下一步操作。4、异步:浏览器访问服务器请求,用户正常操作,...

weixin_39752157的博客 157

小猿圈WEB前端面试题之AJAX面试题

金三银四已经过去了,你升值加薪了吗?你重新找工作了吗?你跳槽了吗?你面试的时候紧张了吗啊?你注意过面试管问你的问题了吗?小猿圈web前端讲师分享WEB前端面试题之AJAX面试题,希望对小伙伴们有所帮助。1,Ajax是什么? 如何创建一个Ajax?ajax是一种创建交互式网页的计算,ajax的全称:Asynchronous Javascript And XML。异步传输+js+xml。所谓异步,在这...

weixin_33898876的博客 307

关于Web的学习(18.6.7)——javascript篇

1.能解释一下[].forEach.call($$("*"),function(a){ a.style.outline="1px solid #"+(~~(Math.random()*(1&lt;&lt;24))).toString(16) })这段代码的意思吗?可在浏览器控制台输入查看效果。会发现HTML层都被使用不同的颜色添加了一个高亮的边框;[].forEach.call()等价于Array...

学习者 386

ajax同步和异步的区别

本文从两个方面讲解了ajax同步和异步的区别,一是从概念上区别,分4点讲解,二是从实际应用出发,分为2点讲解:异步访问的代码详细说明和同步访问的代码详细说明,当页面端提交后,整个页面是不能点击的,必须要等到服务端处理完成后返回到页面端,用户才能继续点击页面,进行下一步操作,这样一个等待的流程叫做同步。

javawebxx的博客 5950

一文学会JavaScript

JavaScript的基础概念和使用,一些案列

weixin_43604021的博客 211

ajax详解

1、ajax (Asynchronous Javascript And XML) 谈到ajax技术的,我们关注最多的毫无疑问就是提升了用户的体验。而要正真想要去了解ajax的出现和原理还用明白下面的两个概,即什么是同步,什么是异步? 2、同步和异步同步的概念来源于操作系统:不同进程为协同完成某项工作而在先后次序上调整(通过阻塞、唤醒等方式)。同步强调的是顺序性,谁先谁后;异步则不存在这种顺序性

技术改变世界 260
上一篇: IIS哪里设置,访问站点不需要输入用户名和密码? 的问题的解决办法
下一篇: csdn dearbook的对联广告
dotnet90
博客等级 码龄23年 102粉丝 413原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值