JavaScript_6.0

el/2023/12/3 1:35:29

文章目录

    • AJAX
      • 介绍
      • XHR(XMLHttpRequest)
      • 服务器响应
      • onreadystatechange
    • Promise
      • Promise().then().then....catch() 多任务串行执行.
      • Promise.all([p1,p2,...]) 多任务并行执行
      • Promise.race([p1,p2,...]) 多任务赛跑.
    • Canvas

AJAX


介绍

AJAX 是一种用于创建快速动态网页的技术。

通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。


XHR(XMLHttpRequest)

var xmlhttp;
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safarixmlhttp=new XMLHttpRequest();}
else{// code for IE6, IE5xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}

XMLHttpRequest对象的open()方法有3个参数,第一个参数指定是GET还是POST,第二个参数指定URL地址,第三个参数指定是否使用异步,默认是true,不能写成false 不然浏览器会停止响应。(规定请求类型、URL、是否异步处理)

send(String)//string参数仅用于POST请求

以下情况使用POST (一般用GET就可以)

  • 无法使用缓存文件(更新服务器上的文件或数据库)
  • 向服务器发送大量数据(POST 没有数据量限制)
  • 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

服务器响应

responseText 属性返回字符串形式的响应,因此您可以这样使用:

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

如果服务器的响应是XML,那么就使用responseXML属性,解析响应(暂时还不是很了解XML)


onreadystatechange

发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态,XMLHttpRequest对象提供了onreadyStateChange事件实现这一功能。这类似于回调函数的做法。

xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4 && xmlhttp.status==200){document.getElementById("myDiv").innerHTML=xmlhttp.responseText;}}
readyState4表示请求已完成
status200 表示响应就绪 404:未找到页面

Promise

Promise().then().then…catch() 多任务串行执行.

情景化记忆:在一个任务链中,比如我要向上级部门一层层的往上提交申请,if(某种条件)承诺帮你resolve解决问题,else承诺reject你的请求. 他给出的resolve问题的办法只是个空头Promise,then到总经理那实现具体承诺,如果总经理还是给一个空头承诺(返回Promise实例),还得then到董事长那里… 任一一步做出的是reject的承诺,还有什么好说的,被拒绝了,后面的就不会再往上走了呀. 准备catch 拒绝通知吧

Promise.all([p1,p2,…]) 多任务并行执行

都要成功才进入then,返回结果数组.

Promise.race([p1,p2,…]) 多任务赛跑.

then()和catch(),谁先调用算谁的,其它任务中断.

JS引擎是单线程的,但是浏览器是多线程的,其执行的方法如setTimeOut是由浏览器来调度的

Promise 无论成功或者失败都会进入then,在then中接受错误的对象后再进入的catch,所以换位子会出错。


Canvas

Canvas是HTML5新增的组件,它就像一块幕布,可以用JavaScript在上面绘制各种图表、动画等。(不需要借助FLASH插件)

var ctx = canvas.getContext('2d');//拿到一个2D对象

可以用它的方法来绘制图形,文本等各种复杂操作

(可以创建多个重叠的Canvas绘制不同的层,尽量使用整数坐标而不是浮点数)


http://www.ngui.cc/el/414499.html

相关文章

cxgrid导出excel文件数字不能计算问题

将列的Properties设置为cxCurrencyEdit就可以计算了

cxgrid列的Properties(cxPopupEditPopup)的关闭方法

TcxPopupEditPopupWindow(GetParentForm(PanelGoods)).ClosePopup; PanelGoods为面板控件 panel

动态设置cxgrid列的Properties

myProperties1 : tcxcomboboxproperties.Create(nil); myProperties1.DropDownListStyle : lsEditFixedList; myProperties1.Items.Add(并且); myProperties1.Items.Add(或者); mycxviewColumn2.PropertiesClass : tcxcomboboxproperties; mycxviewColumn2.Properti…

Delphi中使用ListView和TreeView的Item中的Data可能被忽略的内存泄漏

Delphi中大家在使用 ListView和TreeView时,一般都会使用到Item的Data属性来保存大家自己的内部数据,这个Data的声明如下: property Data: Pointer; 大家可以看到它就是一个指针,使用上一般类似如下代码(以ListView为…