[自学笔记]AJAX一些容易被人忽略的重点

本文深入探讨了AJAX的基础知识,包括初始化连接、同步与异步的区别、回调函数的正确使用以及DOM操作的重要性。通过具体实例,帮助读者理解AJAX在实际应用中需要注意的关键点。
用AJAX开发的时间也有一段日子了,但是“走都没走好,就直接开始跑了”。因为之前在学的AJAX的时间并不多,基本上都是略过,挑一下重点来讲。然后直接学习了了DWR这个简单、强大、好使的框架。所以很多AJAX的基本都忽略了。最近重新学了一下,记下一些关键点。

忽略了这些,往往可能会让你的AJAX程序得到一些意料之外的结果。

[size=medium][b]1、初始化连接 request.open(Param1,Param2,Param3);和提交请求request.send(null);[/b][/size]
Param1:连接到服务器使用的方法,跟表单的method属性一样。"GET"或"POST"可选。推荐一般使用"GET",原因后续。
Param2:提交到服务器的URL地址。
Param3:Boolean类型,决定同步会异步操作。后续会解析。

request.send(null) 提交请求,null有些人可能不知道表示什么,其实就是附带给服务器的参数。就是POST方式提交的表单数据的消息体。

要点:

Param1,推荐使用"GET"。因为大多数情况下,通过AJAX提交的给服务器的参数并不多,使用"GET"的话更加简单,提交的时候直接使用 request.send(null);即可。如果使用"POST"的话,在提交请求的时候 request.send(null)的null就不能直接这样写了。null改为get里面的参数体,例如key=value。而且还必须设置消息体的类型,例如setRequestHeader("Content-Type", "application/x-www-form-urlencoded")。所以相对比较麻烦,但如何取舍才是需要考虑的。

Param2:除了服务器端的接口地址,一般都包含以URL方式传递的参数请求。但注意的是某些浏览器(IE、Opera)的内部缓存机制。这个解析起来有些麻烦,总之如果两次相同URL请求的话,浏览器会把第二次请求不提交到服务器上,而返回第一次已经获得的那次响应。某些情况下,这个是高效的,但是一些情况下却希望每次提交都是新的数据。所以需要加上一个dummy参数,确保每次的URL不同。这个dummy参数可以用当前时间(new Date().getTime())或者random方法生成。
另外,参数的value,可以使用JavaScript提供的escape方法来确保不出现一些非法的值而URL无效。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。

Param3:通常情况下,异步或者同步其实差别不大,因为服务端的响应时间足够快的话。但如果处理时间比较长的话,就要考虑是否同步的问题了,其实同步与否,考虑的关键就是服务器处理请求的这段时间内允不允许用户在页面上做其他操作。

[size=medium][b]2、同步synchronous和异步asynchronous的区别。[/b][/size]
学AJAX的时候基本都会了解这点的。不过很多时候都一知半解,简单说明的话就是同步情况下,通过request.send提交的请求必须等服务器响应给浏览器的时候页面才能做其他操作,不然点任何操作都是一个繁忙状态,鼠标例如WINDOW的旋转漏洞。异步的话,不受这影响,请求完毕后,可以在页面上继续其他操作。
虽然通常情况下,服务端的响应都是十分快的。

要点:
如果是异步的话,注意request某些情况下会被覆盖。即第一个异步请求服务端没返回,第二个提交出去了。而使用同一个request对象的话,第一次的就被覆盖了。所以永远就只能得到一个返回数据了。所以异步情况下,推荐不使用全局request比较好。但request需要传参囖。并且回调函数使用完毕的时候记得初始化一下。

[size=medium][b]3、回调函数。[/b][/size]
一个完善的回调函数,必须有两个判断条件。第一个是判断HTTP就绪状态request.readyState,另外一个是服务器的状态码request.status。
一般是先判断request.readyState==4,然后request.status才真正执行回调函数体。
前者是因为每个request请求,一个HTTP就绪状态request.onreadystatechange共会产生4次。我们知道,当 request.readyState==4才是真正获得了request.responseText的时候。没了这个的话,回调函数就会运行多次了。
后者是因为调试提交到服务器的URL是否正确。一切顺利的话会返回200,找不到页面的话会404,资源被保护的话是403,这些常遇到的状态码相信大家也不会陌生。没了这个的话,开发的时候往往有时候会因为粗心写错URL但是又要花时间去找BUG。

例如:


if (request.readyState == 4) {
if (request.status == 200) {
//do something
} else
alert("ERROR! The request status of " + request.status);
}


[size=medium][b]4、关于操作DIV或SPAN元素。[/b][/size]
希望使用DOM方式操作,因为所有浏览器通常都是支持DOM操作的。避免使用innerHTML方式,因为被认为不安全和不稳定的。逐渐的浏览器会对innerHTML兼容性降低,甚至慢慢抛弃。
MATLAB代码实现了一个基于多种智能优化算法优化RBF神经网络的回归预测模型,其核心是通过智能优化算法自动寻找最优的RBF扩展参数(spread),以提升预测精度。 1.主要功能 多算法优化RBF网络:使用多种智能优化算法优化RBF神经网络的核心参数spread。 回归预测:对输入特征进行回归预测,适用于连续值输出问题。 性能对比:对比不同优化算法在训练集和测试集上的预测性能,绘制适应度曲线、预测对比图、误差指标柱状图等。 2.算法步骤 数据准备:导入数据,随机打乱,划分训练集和测试集(默认7:3)。 数据归一化:使用mapminmax将输入和输出归一化到[0,1]区间。 标准RBF建模:使用固定spread=100建立基准RBF模型。 智能优化循环: 调用优化算法(从指定文件夹中读取算法文件)优化spread参数。 使用优化后的spread重新训练RBF网络。 评估预测结果,保存性能指标。 结果可视化: 绘制适应度曲线、训练集/测试集预测对比图。 绘制误差指标(MAE、RMSE、MAPE、MBE)柱状图。 十种智能优化算法分别是: GWO:灰狼算法 HBA:蜜獾算法 IAO:改进天鹰优化算法,改进①:Tent混沌映射种群初始化,改进②:自适应权重 MFO:飞蛾扑火算法 MPA:海洋捕食者算法 NGO:北方苍鹰算法 OOA:鱼鹰优化算法 RTH:红尾鹰算法 WOA:鲸鱼算法 ZOA:斑马算法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值