详谈ajax原理及使用方式

一、AJAX

在这里插入图片描述

1 基本了解

ajax不是一个新的技术,它是对现有几种技术的一个整合的应用。
ajax叫异步的js和xml。

2、作用

异步刷新-局部刷新
视频网站。

3、ajax实现的基本原理

  • 3.1 以前使用非ajax方式时的结构
    在这里插入图片描述

  • 3.2 ajax方式时结构的基本原理
    ajax方式-异步请求方式实现原理:在客户端通过js对象xhr向服务器发送请求,xhr也要接收服务器发送回来的响应(响应就是一段文本)。再通过js代码操作xhr对象获得的响应文本来实现页面的局部刷新。

在这里插入图片描述

  1. 3.3 好处:(所有操作都是在不刷新窗口的情况下完成的)
    无刷新:不刷新整个页面,只刷新局部
    无刷新的好处
    只更新部分页面,有效利用带宽
    提供连续的用户体验

  2. 4 与传统方式的对比:
    在这里插入图片描述

二、AJAX工作流程

在这里插入图片描述

三、AJAX核心对象和方法

1. XMLHttpRequest --AJAX核心对象

提供异步发送请求的能力
在这里插入图片描述

  1. open()方法
    参数method:设置HTTP请求方法;参数url:请求的URL地址;…
    其中:method参数值大小写不敏感,常用值有get、post等;

  2. send()方法
    data为发送此请求时携带的参数。data参数值取决于open方法中的method参数,
    如果method值为“POST”,需要指定该参数。如果method值为“GET”,该参数为null

  3. setRequestHeader()方法
    参数header:要指定的HTTP头名称;参数value:对应的值。

2、事件:onreadystatechange:指定回调函数

此事件中的常用属性:

  1. readyState:XMLHttpRequest的状态信息
    在这里插入图片描述

  2. status :HTTP的状态码
    在这里插入图片描述

     就绪状态是4且状态码: 是200,表示正确完成
    

3.statusText: 返回当前请求的响应状态
4. responseText: 以文本形式获得响应的内容
5. responseXML: 将XML格式的响应内容解析成 DOM对象返回

四、使用AJAX的步骤

一:使用Ajax技术实现异步交互的步骤
  1. 创建XMLHttpRequest对象
  2. 通过XMLHttpRequest对象设置请求信息
  3. 向服务器发送请求
  4. 创建回调函数,根据响应状态动态更新页面
  5. 编写服务器端处理客户端请求
二 案例:实现验证用户名是否可用:
function validate() {
		var name = $("#name").val();
		if (name == null || name == "") {
			$("#nameDiv").html("用户名不能为空!");
		} else {
			//1.创建XMLHttpRequest对象
			xmlHttpRequest = createXmlHttpRequest();
			//2.设置回调函数
			xmlHttpRequest.onreadystatechange = callBack;
			//3.初始化XMLHttpRequest组件
			var url = "userServlet?name=" + name+&time="+Math.random();//服务器端URL地址,name为用户名文本框获取的值
			xmlHttpRequest.open("GET", url, true);
			//4.发送请求
			xmlHttpRequest.send(null);
			/* 使用POST方式发送请求
			var url = "userServlet";//服务器端URL地址
			xmlHttpRequest.open("POST", url, true);
			xmlHttpRequest.setRequestHeader("Content-Type",
					"application/x-www-form-urlencoded");
			var data ="name=" + name+“&time="+Math.random();//需要发送的数据信息,name为用户名文本框获取的值
			xmlHttpRequest.send(data);
            */
			//Ajax 回调函数
			function callBack() {
				if (xmlHttpRequest.readyState == 4
						&& xmlHttpRequest.status == 200) {
					var data = xmlHttpRequest.responseText;
					if (data == "true") {
						$("#nameDiv").html("用户名已被使用!");
					} else {
						$("#nameDiv").html("用户名可以使用!");
					}
				}
			}//end of callBack()
		}
	}//end of validate()

	/*
	 *创建XMLHttpRequest对象
	 */
	function createXmlHttpRequest() {
		if (window.XMLHttpRequest) {//返回值为true时说明是新版本IE或其他浏览器
			return new XMLHttpRequest();
		} else {//返回值为false时说明是老版本IE浏览器(IE5和IE6)
			return new ActiveXObject("Microsoft.XMLHTTP");
		}
	}

在这里插入图片描述

controller部分的代码:

// 设置响应的编码格式:
	response.setCharacterEncoding("UTF-8");
	response.setContentType("text/html; charset=UTF-8");
	// 获取输出流对象
	PrintWriter out = response.getWriter();
	out.print("返回的结果");
	out.flush();
	out.close();

五、使用JQuery实现AJAX

  1. 语法:
    $.ajax{[settings]}
    在这里插入图片描述
    在这里插入图片描述

  2. 代码:

$.ajax( {
     "url"            :  "url",                      // 要提交的URL路径
     "type"         :  "get",                     // 发送请求的方式
     "data"         :  data,                      // 要发送到服务器的数据
     "dataType" :  "text",                   // 指定传输的数据格式
     "success"  :  function(result) { // 请求成功后要执行的代码
	     },
      "error"       :  function() {           // 请求失败后要执行的代码
	     }
} );

3 实现用户名验证的jQuery:

$(document).ready(function() {
	$("#name").blur(function() {
		var name = this.value;
		if (name == null || name == "") {
			$("#nameDiv").html("用户名不能为空!");
		} else {
			$.ajax({
                "url"       : "userServlet",   //要提交的URL路径
                "type"      : "GET",           //发送请求的方式
                "data"      : "name="+name,    //要发送到服务器的数据
                "dataType"  : "text",          //指定返回的数据格式
                "success"   : callBack,        //响应成功后要执行的代码
                "error"     : function() {     //请求失败后要执行的代码
                    alert("用户名验证时出现错误,请稍后再试或与管理员联系!");
                }
            });

			//响应成功时的回调函数
			function callBack(data) {
				if (data == "true") {
					$("#nameDiv").html("用户名已被使用!");
				} else {
					$("#nameDiv").html("用户名可以使用!");
				}
			}//end of callBack()
		}
	});//end of blur()
});
jQuery中—“$ .get()”和“$ .post()”方法
1.$.get()

$.get( url [, data] [, success] [, dataType] );
在这里插入图片描述
与:等价

在这里插入图片描述

2.$.post()

$.post( url [, data] [, success] [, dataType] );

在这里插入图片描述 与:等价

在这里插入图片描述

### XGBoost的工作原理 XGBoost是一种基于梯度提升框架的机器学习算法,它通过构建一系列弱学习器(通常是决策树),并将其组合成强学习器来完成复杂的预测任务。其核心思想在于最小化目标函数中的损失项正则化项[^3]。 #### 加法模型与目标函数 XGBoost采用加法模型的形式,即每一轮迭代都会新增一棵树 \( f_t(x) \),并将这棵树的结果加入到当前模型中。具体来说,第 \( t \) 轮更新后的预测值可以表示为: \[ \hat{y}_i^{(t)} = \hat{y}_i^{(t-1)} + f_t(x_i) \] 其中,\( f_t(x) \) 是本轮新增的一棵回归树,而 \( \hat{y}_i^{(t-1)} \) 表示前 \( t-1 \) 轮累积得到的预测值[^4]。 为了找到最优的 \( f_t(x) \),XGBoost定义了一个带正则化的目标函数: \[ \text{Obj}(\theta) = \sum_{i=1}^n l(y_i, \hat{y}_i) + \Omega(f_k) \] 这里,\( l(y_i, \hat{y}_i) \) 是损失函数,用于衡量预测值与真实值之间的差距;\( \Omega(f_k) \) 则是对单棵树复杂度的惩罚项,形式如下: \[ \Omega(f) = \gamma T + \frac{1}{2}\lambda ||w||^2 \] 其中,\( T \) 代表叶子节点的数量,\( w \) 是各叶子节点上的权重向量,参数 \( \gamma \) \( \lambda \) 控制着正则化的强度[^3]。 #### 近似分裂点查找 在实际操作过程中,由于直接求解精确的最佳分割点可能代价过高,因此XGBoost引入了一种近似的分裂策略。该方法首先统计候选特征的所有实例分布情况,并按照增益最大原则选取最佳划分位置[^4]。 另外值得注意的是,当面对大规模稀疏输入数据时,XGBoost能够自动识别缺失值并合理分配样本至左子叶或右子叶方向之一,从而进一步提升了效率与效果[^4]。 ### 实现步骤概述 以下是利用XGBoost进行建模的主要流程: 1. **准备阶段**: 对原始数据集执行必要的预处理操作,比如填补空缺字段、转换类别型属性等; 2. **初始化设置**: 明确指定待解决的任务类型(如回归或者二元分类)、评价指标以及超参数范围; 3. **训练过程**: 使用历史经验指导下的随机搜索技术调整内部结构直至收敛为止; 4. **验证分析**: 借助交叉检验手段评估最终成果的质量水平; 5. **部署上线**: 将经过充分测试确认无误之后的成品导出保存以便后续重复调用[^1]。 ```python import xgboost as xgb from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error # Load data and split into training/testing sets. data = load_boston() X_train, X_test, y_train, y_test = train_test_split(data.data, data.target) dtrain = xgb.DMatrix(X_train, label=y_train) dtest = xgb.DMatrix(X_test, label=y_test) params = { 'objective': 'reg:squarederror', 'max_depth': 6, 'eta': 0.1, } bst = xgb.train(params=params, dtrain=dtrain, num_boost_round=100) preds = bst.predict(dtest) rmse = np.sqrt(mean_squared_error(y_test, preds)) print("RMSE:", rmse) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值