原始ajax发起请求并反馈

本文介绍了一个简单的用户登录验证系统实现方式,通过Ajax技术实现在用户离开输入框时即时验证用户名和密码的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在用户登陆的时候,离开用户、密码输入框即进行验证:ajax发起请求进行验证的:

login.jsp代码:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户登陆</title>
</head>
<body>
    <form action="#" method="post">
        <input type="hidden" name="action" value="login"/>
        用户名: <input type="text" maxlength="10" name="username" id="userid" onblur="validata('user')">
                <span id="uservalidate" style="color:red"></span>
        <br><br>
        密码: <input type="password" maxlength="10" name="password" id="passwordid" onblur="validata('password')"/>
              <span id="passvalidate" style="color:red"></span>
        <br><br>
        <input type="submit" value="登陆"/>&nbsp;<input type="reset" value="重置"/>
    </form>
</body>
<script type="text/javascript">
var request;
var actionType;

//onblur的时候,发起ajax请求验证用户/密码是否正确
function validata(type){
    actionType = type;
    var url;
    if(window.XMLHttpRequest){
        request = new XMLHttpRequest();
    }else if(window.ActiveXObject){
        request = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if(type=='user'){
        actionType = 'usercheck';
        var username = document.getElementById("userid").value;
        url = "validate.jsp?action=usercheck&username=" +username;
        request.open("GET", url, true);
    }else if(type=='password'){
        actionType = 'passwordcheck';
        var password = document.getElementById("passwordid").value;
        url = "validate.jsp?action=passwordcheck&password=" +password;
        request.open("POST", url, true);
    }
    request.onreadystatechange = callback;    //当状态变化,调用callback方法 callback这里不能写参数,写了只调一次,为什么?
    request.send(null);    //sends HTTP request;body can be null;
}

//ajax返回的处理函数
function callback(){
    if(request.readyState == 4){
        if(request.status == 200){
            var msg = request.responseText;
            console.log(msg);
            if(actionType=='usercheck'){
                if(msg == "wrong"){
                    document.getElementById("uservalidate").innerText = "用户名错误!";
                }else if(msg == 'correct'){
                    document.getElementById("uservalidate").innerText = "用户名正确!";
                }
            }else if(actionType=='passwordcheck'){
                if(msg == "wrong"){
                    document.getElementById("passvalidate").innerText = "密码错误!";
                }else if(msg == 'correct'){
                    document.getElementById("passvalidate").innerText = "密码正确!";
                }
            }
        }
    }
}
</script>
</html>

后台使用validate.jsp进行简单验证模拟:

<%
    /**
    setContentType常用参数:
    text/html HTML
    text/plain TXT 
    text/xml XML 
    text/javascript json数据
    response.setContentType(“text/html;charset=UTF-8”);
    */
    response.setContentType("text/plain;charset=utf-8"); 
    response.setHeader("Cache-Control", "no-store"); //HTTP1.1
    response.setHeader("Pragma", "no-cache"); //HTTP1.0
    response.setDateHeader("Expires", 0); //prevents catching at proxy server

    String action = request.getParameter("action");
    if(action!=null && action.equals("usercheck")){
        String username = request.getParameter("username");
        if(username!=null && !username.equals("admin")){
            response.getWriter().write("wrong");
        }else{
            response.getWriter().write("correct");
        }
    }else if(action!=null && action.equals("passwordcheck")){
        String password = request.getParameter("password");
        if(password!=null && !password.equals("admin")){
            response.getWriter().write("wrong");
        }else{
            response.getWriter().write("correct");
        }
    }
%>

页面效果:

补充知识:

XMLHttpRequest的方法:

XMLHttpRequest的属性:

有更好的例子,或者用法继续补充》》》》》》》》》》》》》》》》》

 注意:上面的validate.jsp我并没有写<%@ page contentType="text/html;charset=utf8" ... %>等这个头部信息,写了之后,发现response.getWriter().write("wrong")写到客户端,console一看总是"wrong"后面多个换行符,就始终不对;研究下为什么。

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> 

pageEncoding是jsp文件本身的编码 

contentType的charset是指服务器发送给客户端时的内容编码 

不同于常规 servlet (默认的 MIME 类型为 text/plain),JSP 页面的默认 MIME 类型是 text/html (默认字符集为 ISO-8859-1)。因此,如果 JSP 页曲以 Latin 字符集输出 HTML则根本无需使用 contentType

 

转载于:https://www.cnblogs.com/tenWood/p/6261280.html

### 使用 Ajax 实现网页动态请求 Ajax 是一种通过在后台与服务器交换少量数据来更新当前页面的技术。它可以显著提升用户体验,因为无需刷新整个页面即可完成局部更新。 #### 1. 基于原生 JavaScript 的实现方式 使用 `XMLHttpRequest` 对象可以轻松实现 AJAX 请求。以下是具体代码示例: ```javascript var request = new XMLHttpRequest(); // 创建 XMLHttpRequest 对象[^1] request.open('GET', 'https://example.com/data', true); // 设置请求方法、URL 和异步标志 request.onload = function() { if (request.status >= 200 && request.status < 400) { var data = JSON.parse(request.responseText); console.log(data); // 处理返回的数据 } else { console.error('Error: ' + request.statusText); } }; request.onerror = function() { console.error('Request failed'); }; request.send(); // 发送请求 ``` 此代码展示了如何发送 GET 请求处理响应数据[^1]。 --- #### 2. 借助 jQuery 库简化操作 jQuery 提供了一个更简洁的 API 来执行 AJAX 请求。以下是一个基于 POST 方法提交表单数据的例子: ```javascript $.ajax({ type: "POST", // 定义 HTTP 请求方法为 POST[^2] url: "/api/login", // 指定目标 URL 地址 dataType: "json", // 预期服务器返回 json 数据类型 data: { name: "testUser", password: "123456" }, // 要传递给服务器的数据对象 success: function(response) { if (response.success === true) { alert("登录成功!"); } else { alert("登录失败!"); } }, error: function(xhr, status, error) { console.error(error); } }); ``` 这段代码演示了如何利用 jQuery 执行一个简单的登录验证过程[^2]。 --- #### 3. 解决跨域问题——JSONP 技术的应用 当遇到不同域名之间的资源访问需求时,传统的 XMLHTTPRequest 将无法正常工作,而 JSONP 则提供了一种解决方案。下面是如何通过 JSONP 进行跨域请求的一个例子: ```html <script> function handleResponse(data){ document.getElementById("result").innerHTML += "<br/>Got response:" + data; } </script> <!-- 动态加载脚本 --> <script src="http://anotherdomain.com/api?callback=handleResponse"></script> ``` 在这个场景下,远程服务会将结果封装在一个指定名称(这里是 `handleResponse`)的函数调用里返回给客户端[^3]。 --- ### 总结 无论是采用原始的 `XMLHttpRequest` 方式还是借助流行的库如 jQuery 或其他现代框架,都可以方便地发起 AJAX 请求从而达到无刷新更新页面的效果。对于跨域情况,则可考虑使用 JSONP 技术作为替代方案之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值