jQuery ajax + java servlet踩坑

首先,如果一直回调error的方法,可以先看看错误信息
error: function (XMLHttpRequest, textStatus, errorThrown) {
                        // 状态码
                        console.log(XMLHttpRequest.status);
                        // 状态
                        console.log(XMLHttpRequest.readyState);
                        // 错误信息
                        console.log(textStatus);
                    }
我所碰到的问题
1.URL问题

协议必须是http或者data等等,报错信息如下

Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

2.编码问题

servlet处理方法加上

resp.setContentType("text/html;charset=utf-8");
3.返回格式问题

java PrintWriter返回的内容格式必须和ajax的dataType格式对应
如dataType=“json”,那么PrintWriter就得返回json格式的字符串,jQuery会检测格式是否符合。
如果你只想返回一个字符串做做测试什么的,ajax写上dataType=”text"就行
ajax的dataType默认是json

预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如XML MIME类型就被识别为XML。在1.4中,JSON就会生成一个JavaScript对象,而script则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后,传递给回调函数。可用值:
“xml”: 返回 XML 文档,可用 jQuery 处理。
“html”: 返回纯文本 HTML 信息;包含的script标签会在插入dom时执行。
“script”: 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了"cache"参数。’’‘注意:’’'在远程请求时(不在同一个域下),所有POST请求都将转为GET请求。(因为将使用DOM的script标签来加载)
“json”: 返回 JSON 数据 。
“jsonp”: JSONP 格式。使用 JSONP 形式调用函数时,如 “myurl?callback=?” jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
“text”: 返回纯文本字符串

参考文档:
http://hemin.cn/jq/jQuery.ajax.html

附Vue的ajax:
http://www.runoob.com/vue2/vuejs-ajax.html

4.最后附上我之前用于测试的代码
jsp
<%@page language="java" pageEncoding="UTF-8" %>
<html>
<head>
    <title>ajax test</title>
    <script src="https://cdn.bootcss.com/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
</head>
<body>
<div id="app">
    <input type="text" :value="msg">
    <input type="button" @click="onButtonClick" value="戳我">
</div>
</body>
<script>
    var vm = new Vue({
        el:'#app',
        data:{
            msg:""
        },
        methods:{
            onButtonClick(){
                var that = this;
                $.ajax({
                    type:"GET",
                    dataType:"text",
                    url:"http://localhost:8080/ajax",
                    success(msg){
                        that.msg = msg
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                        // 状态码
                        console.log(XMLHttpRequest.status);
                        // 状态
                        console.log(XMLHttpRequest.readyState);
                        // 错误信息
                        console.log(textStatus);
                    }
                })
            }
        }
    })
</script>
</html>
java servlet
package servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/ajax")
public class AjaxTestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");

        PrintWriter pw = resp.getWriter();
        pw.println("啦啦啦");
        pw.flush();
        pw.close();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个简单的实现过程: 1. 编写HTML页面,包括输入框、按钮等元素,并引入jQuery和自己编写的JavaScript文件。 2. 在JavaScript文件中使用jQuery的`$.ajax()`方法发送注册请求,包括用户名、密码等信息,以及请求的url、请求方式、数据类型等参数。 3. 在服务器端,接收到注册请求后,解析请求参数,并将用户信息保存到数据库中。 4. 服务器端处理完请求后,返回响应数据,可以是一个简单的字符串,也可以是一个JSON对象,表示注册成功或失败等信息。 5. 在客户端JavaScript文件中,使用`$.ajax()`方法的回调函数,根据服务器返回的响应数据,更新显示信息,例如在页面上提示用户注册成功或失败的信息。 下面是一个简单的示例代码,以便您更好地理解: HTML页面: ``` <form> <label>用户名:</label> <input type="text" id="username" name="username"><br> <label>密码:</label> <input type="password" id="password" name="password"><br> <button type="button" id="registerBtn">注册</button> </form> ``` JavaScript文件: ``` $(function() { $('#registerBtn').click(function() { var username = $('#username').val(); var password = $('#password').val(); $.ajax({ type: 'POST', url: 'register.php', dataType: 'json', data: { username: username, password: password }, success: function(data) { if (data.success) { alert('注册成功!'); } else { alert('注册失败: ' + data.message); } }, error: function(xhr, status, error) { alert('注册失败: ' + error); } }); }); }); ``` PHP后端代码: ``` <?php // 解析请求参数 $username = $_POST['username']; $password = $_POST['password']; // 将用户信息保存到数据库中,此处省略 // 返回响应数据 $response = array('success' => true); echo json_encode($response); ?> ``` 以上代码仅作为示例,实际应用中还需要进行参数校验、异常处理等操作,以保证系统的健壮性和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值