ajax调用restful接口

news2024/9/29 17:57:53
HTTP动词对应操作
POST新增信息
GET获取信息
PUT更新信息
DELETE删除信息

 


一、POST-----新增信息
1. 后台接口

@PostMapping(value = "/save")
public String save(@RequestBody(required = true) Emp emp){
    System.err.println(emp.toString());
    // 将数据信息存库
    empService.saveEmp(emp);
    return "Object Save to DB!!!";
}


使用@PostMapping注解,则表示必须用POST方式才能请求该接口;

使用@RequestBody注解,则代表请求该接口时的入参,必须是JSON格式的数据;

2. ajax请求

        let parms = {"id": "1001","name":"爱吃红豆的猫"};
        $.ajax({
            url:'/save',
            data: JSON.stringify(parms),
            type:'POST',
            dataType:'text',// 返回数据类型,因为后台返回的不是json格式的数据,所以如果这里使用json,则前台控制台打印的会是2,而不是1;
            contentType:"application/json;charset=UTF-8",
            success:function(data) {
                console.log(1)
            },
            error:function(data) {
                console.log(2)
            }
        })


由于后台接口使用了@PostMapping注解,所以ajax中的type属性必须是POST;

由于后台接口使用了@RequestBody注解,所以ajax的data必须是json格式的,所以需要用JSON.stringify()将数据转换为json格式的字符串;

同时需要指定contentType为"application/json;charset=UTF-8",因为默认的是’application/x-www-form-urlencoded;charset=UTF-8’;

二、GET-----获取信息
1. 后台接口

@GetMapping(value = "/restful/{id}/{orderindex}")
public String info(@PathVariable(required = true) String id, @PathVariable(required = true) long orderindex){
    BoTaskPlan boTaskPlan = new BoTaskPlan();
    boTaskPlan.setId(id);
    boTaskPlan.setOrderindex(orderindex);
    BoTaskPlan bo = this.service.getOne(boTaskPlan);
    return bo.toString();
}


使用@GetMapping注解,则表示必须用GET方式才能请求该接口;

使用@PathVariable注解,则代表请求该接口时的入参在URI上(URI就是URL除了http和域名或IP端口之外的后面那一截);

2. ajax请求

        let id = "1001";
        let orderindex = "7";
        $.ajax({
            url:'/restful/' + id + "/" + orderindex,
            type:'GET',
            dataType:'json',
            contentType:"application/json;charset=UTF-8",
            success:function(data) {
                console.log(1)
            },
            error:function(data) {
                console.log(2)
            }
        })



由于后台接口使用了@GetMapping注解,所以ajax中的type属性必须是GET;

由于后台使用了@PathVariable注解,所以参数直接放到URL的"/"后,而不是像以前放在?后面;

三、PUT-----更新信息
1. 后台代码

@PutMapping(value = "/restful")
public String update(@RequestBody(required = true) BoTaskPlan bo){   // 使用@PathVariable获取{XXX}中的XXX变量值
    // 更新数据
    service.updateById(bo);
    // 查询数据
    bo = service.getOne(bo.getId());
    return bo.toString();
}


使用@PutMapping注解,则表示必须用PUT方式才能请求该接口;

由于后台接口使用了@RequestBody注解,所以ajax的data必须是json格式的,所以需要用JSON.stringify()将数据转换为json格式的字符串;

2. ajax请求

        let arr = {"createuser":"admin","id":"1002"};
        $.ajax({
            url:'/restful',
            data: JSON.stringify(arr),
            type:'PUT',
            dataType:'json',    
            contentType:"application/json;charset=UTF-8",
            success:function(data) {
                console.log(1)
            },
            error:function(data) {
                console.log(2)
            }
        })


由于后台接口使用了@PutMapping注解,所以ajax中的type属性必须是PUT;

由于后台使用了@RequestBody,所以ajax的data必须是json字符串

四、DELETE-----删除信息
1. 后台代码

@DeleteMapping(value = "/restful/{id}")
public String delete(@PathVariable(required = true) String id){   // 使用@PathVariable获取{XXX}中的XXX变量值
    // 删除信息
    service.deleteById(id);
    // 查询所有信息
    List<BoTaskPlan> list = service.getAll();
    return list.toString();
}


使用@DeleteMapping注解,则表示必须用DELETE方式才能请求该接口;

使用@PathVariable注解,则代表请求该接口时的入参在URI上(URI就是URL除了http和域名或IP端口之外的后面那一截);

2. ajax请求

        $.ajax({
            url:'/restful/22311',
            type:'DELETE',
            dataType:'json',    
            contentType:"application/json;charset=UTF-8",
            success:function(data) {
                console.log(1)
            },
            error:function(data) {
                console.log(2)
            }
        })


由于后台接口使用了@DeleteMapping注解,所以ajax中的type属性必须是DELETE;

由于后台使用了@PathVariable注解,所以参数直接放到URL的"/"后,而不是像以前放在?后面;

AJAX跨域调用RESTFUL接口

一. JSONP方式
前端代码:

let patientInfoURL = 'http://10.1.8.82:8332/soap/GetPatInfo?citycardno=0000997144446894&id=32010600000002012';
$.ajax({
     type:'get',
     url: patientInfoURL ,
     dataType:'jsonp',
     //jsonp:'callback',//默认就是callback,可以不写
     //jsonpCallback:"successCallback",//此处定义请求url中callback参数后的值,不写则jQuery会自动生成一个字符串
     success:function(data){
        console.log(data);
     },
     error:function(XMLHttpRequest, textStatus, errorThrown){
          alert(XMLHttpRequest.status);
          alert(XMLHttpRequest.readyState);
          alert(textStatus);
     }
 });

Ajax跨域请求,浏览器会在请求的url后面自动加上两个param,一个key=callback,另一个key=_。其中第一个key的值callback可以通过jsonp:’callback’来改变,默认是callback。第二个key用途不清楚,不影响使用

  • 自定义jsonp的callback名字(即带有jsonpCallback:”successCallback”)

  • 未自定义jsonp的callback名字(即不带有jsonpCallback:”successCallback”) 

 后台代码

Response.ContentType="text/html; charset=utf-8";
String callback = Request.QueryString["callback"].ToString();
Response.Write(callback + "{ \"success\": [{ \"id\": 1, \"title\": \"title 1\" }, { \"id\": 2, \"title\": \"title 2\" }, { \"id\": 3, \"title\": \"title 3\"}] }");

通过获取前端请求url中param的key为callback的值来作为回调函数名。 

二. CORS方式
介绍:

CROS是现在主流解决跨域问题的方案,未来估计也是趋势。

Cross-Origin Resource Sharing (CORS) 是W3c工作草案,它定义了在跨域访问资源时浏览器和服务器之间如何通信。CORS背后的基本思想是使用自定义的HTTP头部允许浏览器和服务器相互了解对方,从而决定请求或响应成功与否。

CORS方式的Ajax跨域请求和普通的非跨域Ajax请求看上去没什么区别,事实也确实如此。这也是CORS方式的有点所在。所做的工作和非跨域并无区别,主要的区别则是在后端代码。

后台代码: 

// 跨域配置
response.setHeader("Access-Control-Allow-Origin","*");
response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Max-Age", "3600"); // 保持跨域Ajax时的Cookie
response.setHeader("Access-Control-Allow-Headers", "x-auth-token, x-requested-with,Authorization,Origin, Accept, Content-Type,x-xsrf-token");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/381023.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android开发面试【金三】——启动优化

前言 一下子来到了&#xff0c;面试的高潮季。金三银四的三月份&#xff1b;在我们Android开发的众多面试中&#xff0c;扑面而来的超多面试题难道很多程序员。 Android的性能优化&#xff0c;主要是从以下几个方面进行优化的&#xff1a; 稳定&#xff08;内存溢出、崩溃&am…

安全认证--JWT介绍及使用

安全认证--JWT介绍及使用1.无状态登录原理1.1.什么是有状态&#xff1f;1.2.什么是无状态1.3.如何实现无状态1.4.JWT1.4.1.简介1.4.2.数据格式2.编写JWT工具2.1.添加JWT依赖2.2.载荷对象2.3.工具2.4.测试2.4.1.配置秘钥2.4.2.测试类2.5项目源码1.无状态登录原理 有状态登录和无…

G1D54-CRF

一、CRF的输入X是什么&#xff1f;是构造的特征吗&#xff1f; 如此&#xff0c;CRF的x只用于状态函数吗&#xff1f; CRF的例子解释调用代码 机器之心 知乎忆榛 此处线性链条件随机场的特征函数形式被统一了&#xff1f; BilstmCRF&#xff0c;强烈推荐&#xff01;&#x…

AM402和SV660N、IS620N运动控制

软件&#xff1a;InoProShop(V1.7.3) 1、添加EtherCAT伺服从站 2、PLC运动控制程序和ETHERCAT在一个任务中。 3、编码器脉冲设置。 注意电机转速值是以秒还是分钟计量单位。 SV660N IS620N 4、设置电机停机方式。使用sin停机效果比较圆滑&#xff0c;默认梯形。 5、库管理器…

广和通携手联发科技正式发布基于MediaTek T830 平台5G模组FG370的可快速落地FWA解决方案

2月28日&#xff0c;全球领先的物联网无线通信解决方案和无线通信模组提供商广和通正式宣布&#xff1a;新一代5G模组FG370已率先实现量产&#xff0c;并于2023世界移动通信大会&#xff08;MWC Barcelona 2023&#xff09;期间携手联发科技正式发布基于FG370的FWA解决方案&…

十三、MyBatis的缓存

缓存&#xff1a;cache 缓存的作用&#xff1a;通过减少IO的方式&#xff0c;来提高程序的执行效率。 mybatis的缓存&#xff1a;将select语句的查询结果放到缓存&#xff08;内存&#xff09;当中&#xff0c;下一次还是这条select语句的话&#xff0c;直接从缓存中取&#xf…

数字信号复习题纲

数字信号复习题纲一、希尔伯特变换器&#xff08;:heavy_check_mark: &#xff09;1. 什么是希尔伯特变换器&#xff1f;2. 试证明信号通过希尔伯特变换器后的输出二、能量信号的自相关函数、卷积运算与能量谱&#xff08;:heavy_check_mark:&#xff09;1. 能量信号2. 试证明自…

webpack配置完全指南

前言 对于入门选手来讲&#xff0c;webpack 配置项很多很重&#xff0c;如何快速配置一个可用于线上环境的 webpack 就是一件值得思考的事情。其实熟悉 webpack 之后会发现很简单&#xff0c;基础的配置可以分为以下几个方面&#xff1a; entry 、 output 、 mode 、 resolve …

深入理解Storm 之 TridentStrom

从Demo讲起: FixedBatchSpout spout new FixedBatchSpout(new Fields("sentence"), 3, new Values("the cow jumped over the moon"),new Values("the man went to the store and bought some candy"),new Values("four score and seven …

新库上线 | CnOpenData中国债券市场债券信息数据

中国债券市场债券信息数据 一、数据简介 债券是政府、企业、银行等债务人为筹集资金&#xff0c;按照法定程序发行并向债权人承诺于指定日期还本付息的有价证券。债券购买者或投资者与发行者之间是一种债权债务关系&#xff0c;债券发行人即债务人&#xff0c;投资者&#xff…

关于 python 的异常使用说明 (python 的文件和异常)

文章目录异常1. 处理异常 ZeroDivisionError 异常2. 使用 try-except 代码块3. 使用异常避免崩溃4. else 代码块5. 处理 FileNotFoundError 异常6. 分析文本7. 失败时一声不吭异常 pyhong 使用被异常成为异常的特殊对象来管理程序执行期间发生的错误。 每当发生让 python 不知所…

【计算机网络:自顶向下方法】Chapter5 网络层:控制平面

本系列文章为笔者在学习b站中科大郑烇老师的计算机网络课程时&#xff08;郑老师讲得很清晰&#xff01;&#xff01;&#xff09;&#xff0c;结合课程PPT与《计算机网络&#xff1a;自顶向下方法》&#xff08;第七版&#xff09;所作的学习笔记&#xff0c;部分图片源自课程…

gitee 奇安信代码卫士使用

注册 gitee 账号后&#xff0c;push 一个项目&#xff0c;或者 fork 一个别人的项目&#xff0c;这里 fork 了一个 java-sec-code 靶场&#xff0c;使用的是个人版&#xff0c;像是低配版的 fortify 在项目的 服务 项下&#xff0c;选择奇安信代码卫士 创建分析 新建分析&…

【Java|golang】2373. 矩阵中的局部最大值

给你一个大小为 n x n 的整数矩阵 grid 。 生成一个大小为 (n - 2) x (n - 2) 的整数矩阵 maxLocal &#xff0c;并满足&#xff1a; maxLocal[i][j] 等于 grid 中以 i 1 行和 j 1 列为中心的 3 x 3 矩阵中的 最大值 。 换句话说&#xff0c;我们希望找出 grid 中每个 3 x …

操作系统笔记、面试八股(一)—— 进程、线程、协程

文章目录1. 进程、线程、协程1.1 进程1.1.1 进程间的通信方式1.1.2 进程同步方式1.1.3 进程的调度算法1.1.4 优先级反转1.1.5 进程状态1.1.6 PCB进程控制块1.1.7 进程的创建和撤销过程1.1.8 为什么要有进程1.2 线程1.2.1 为什么要有线程1.2.2 线程间的同步方式1.3 协程1.3.1 什…

创建Firebase项目并接入Firebase推送: Firebase Cloud Messaging (FCM)

1.FCM简介&#xff1a;Firebase Cloud Messaging (FCM) 是一种跨平台消息传递解决方案&#xff0c;可供您可靠地传递消息&#xff0c;而且还是免费的服务。支持 Android&#xff0c;IOS,Web,Flutter,Unity.消息类型可以使用 FCM 向客户端发送两种类型的消息&#xff1a;通知消息…

CEC2017:鱼鹰优化算法(Osprey optimization algorithm,OOA)求解cec2017(提供MATLAB代码)

一、鱼鹰优化算法简介 鱼鹰优化算法&#xff08;Osprey optimization algorithm&#xff0c;OOA&#xff09;由Mohammad Dehghani 和 Pavel Trojovsk于2023年提出&#xff0c;其模拟鱼鹰的捕食行为。 鱼鹰是鹰形目、鹗科、鹗属的仅有的一种中型猛禽。雌雄相似。体长51-64厘米…

Allegro如何设置铜皮避让的优先级操作指导

Allegro如何设置铜皮避让的优先级操作指导 在用Allegro进行PCB设计的时候,时常需要使用动态铜皮进行设计,当两块动态铜皮存在交集的时候,避让就会存在一个优先级,如下图 上方的铜皮避让调了下方的铜皮,上方的铜皮被避让了 如何调整让下方的铜皮避让上方的铜皮,如下图 具…

入门JAVA第十六天 数据库

一 、数据库技术学习内容与方法 1.1学习内容 1 Oracle 数据库 目前最好的关系型数据库 基本的CRUD命令。 SQL语句。select(R),update(U),detele(D),insert(C) 2 MySQL数据库 中小型醒目非常好用的关系型数据库。 灵活&#xff0c;小巧。 3 扩展软件开发流程中数据库设计原则 …

严格模式和非严格模式下的this指向问题

一、全局环境 1.函数调用 非严格模式&#xff1a;this指向是Window // 普通函数 function fn () { console.log(this, this); } fn() // 自执行函数 (function fn () { console.log(this, this); })() 严格模式&#xff1a;this指向是undefined //…