如何在百度提交网站,手机作网站服务器,制作网页推广宣传,淡水网站建设公司XMLHttpRequest发送请求 在JavaScript中#xff0c;使用XMLHttpRequest()发送多个参数通常涉及到设置HTTP请求的Content-Type头部#xff0c;并且将参数作为请求体的一部分发送。以下是一个示例#xff0c;展示了如何发送包含多个参数的POST请求#xff1a; var xhr new X… XMLHttpRequest发送请求 在JavaScript中使用XMLHttpRequest()发送多个参数通常涉及到设置HTTP请求的Content-Type头部并且将参数作为请求体的一部分发送。以下是一个示例展示了如何发送包含多个参数的POST请求 var xhr new XMLHttpRequest();
var url your_endpoint_url;xhr.open(POST, url, true);// 设置请求头部指定内容类型为表单数据
xhr.setRequestHeader(Content-Type, application/x-www-form-urlencoded);// 构建参数字符串
var params param1value1param2value2param3value3;// 发送请求
xhr.send(params);xhr.onreadystatechange function () {if (xhr.readyState 4 xhr.status 200) {// 请求成功console.log(xhr.responseText);}
};-----------------------------------------------------------------//发送JSON类型数据
// 创建一个新的 XMLHttpRequest 对象
var xhr new XMLHttpRequest();// 配置请求类型、URL 以及是否异步处理POST!!!!!
xhr.open(POST, your_server_endpoint, true);// 设置请求头告知服务器内容类型是 JSON
xhr.setRequestHeader(Content-Type, application/json);// 定义发送数据到服务器的 success 函数
xhr.onreadystatechange function() {if (xhr.readyState XMLHttpRequest.DONE) {if (xhr.status 200) {// 请求成功console.log(xhr.responseText);} else {// 请求出错console.error(Error: xhr.status);}}
};// 创建要发送的 JSON 数据字符串
var jsonData JSON.stringify({key1: value1,key2: value2
});// 发送 JSON 数据
xhr.send(jsonData); 在这个例子中我们使用x-www-form-urlencoded内容类型这是一种常见的Web表单数据编码格式。每对键值由字符分隔并且使用字符分隔键和值。这种格式适用于大多数后端服务器语言如PHP、Python、Ruby等。如果你需要发送JSON数据可以将内容类型设置为application/json(POST请求)并相应地序列化你的数据为JSON字符串。 axios发送请求 Axios 是一个基于 promise (Promise其实也不难-CSDN博客)的 HTTP 库可以在浏览器和 node.js 中使用 // 发送 GET 请求
axios.get(https://api.example.com/data).then(response {console.log(response.data);}).catch(error {console.error(error);});// 发送 POST 请求
axios.post(https://api.example.com/data, {key1: value1,key2: value2
})
.then(response {console.log(response.data);
})
.catch(error {console.error(error);
});-------------------------------------------------
//可选配置
const config {headers: {Authorization: Bearer your-token}
};
axios.get(https://api.example.com/data, config);--------------------------------------------------
//并发请求
axios.all([axios.get(https://api.example.com/data1),axios.get(https://api.example.com/data2)
]).then(axios.spread((response1, response2) {// 处理两个响应
}));-------------------------------------------------
//axios拦截器
// 添加请求拦截器
axios.interceptors.request.use(config {// 在发送请求之前做些什么return config;
}, error {// 对请求错误做些什么return Promise.reject(error);
});// 添加响应拦截器
axios.interceptors.response.use(response {// 对响应数据做点什么return response;
}, error {// 对响应错误做点什么return Promise.reject(error);
});
import axios from axios
import { Notification, MessageBox, Message, Loading } from element-ui
import store from /store
import { getToken } from /utils/auth
import errorCode from /utils/errorCode
import { tansParams, blobValidate } from /utils/ruoyi;
import cache from /plugins/cache
import { saveAs } from file-saver
import qs from qslet downloadLoadingInstance;
// 是否显示重新登录
export let isRelogin { show: false };// axios.defaults.headers[Content-Type] application/json;charsetutf-8
// 对应国际化资源文件后缀
axios.defaults.headers[Content-Language] zh_CN
// 创建axios实例
const service axios.create({// axios中请求配置有baseURL选项表示请求URL公共部分baseURL: process.env.VUE_APP_BASE_API,// 超时timeout: 100000
})// request拦截器
service.interceptors.request.use(config {// 是否需要设置 tokenconst isToken (config.headers || {}).isToken false//此处以下为重点//headers中的content-type 默认的大多数情况是 application/json就是json序列化的格式config.headers[Content-Type] application/json//为了判断是否为formdata格式增加了一个变量为type,如果type存在而且是form的话则代表是formData的格式if (config.type config.type form) {config.headers[Content-Type] application/x-www-form-urlencoded//data是接收的数据接收的数据需要通过qs编码才可以直接使用if (config.data) {config.data qs.stringify(config.data)}}// 是否需要防止数据重复提交const isRepeatSubmit (config.headers || {}).repeatSubmit falseif (getToken() !isToken) {config.headers[Authorization] Bearer getToken() // 让每个请求携带自定义token 请根据实际情况自行修改}// get请求映射params参数if (config.method get config.params) {let url config.url ? tansParams(config.params);url url.slice(0, -1);config.params {};config.url url;}if (!isRepeatSubmit (config.method post || config.method put)) {const requestObj {url: config.url,data: typeof config.data object ? JSON.stringify(config.data) : config.data,time: new Date().getTime()}const sessionObj cache.session.getJSON(sessionObj)if (sessionObj undefined || sessionObj null || sessionObj ) {cache.session.setJSON(sessionObj, requestObj)} else {const s_url sessionObj.url; // 请求地址const s_data sessionObj.data; // 请求数据const s_time sessionObj.time; // 请求时间const interval 1000; // 间隔时间(ms)小于此时间视为重复提交if (s_data requestObj.data requestObj.time - s_time interval s_url requestObj.url) {const message 数据正在处理请勿重复提交;console.warn([${s_url}]: message)return Promise.reject(new Error(message))} else {cache.session.setJSON(sessionObj, requestObj)}}}return config
}, error {console.log(error)Promise.reject(error)
})// 响应拦截器
service.interceptors.response.use(res {// 未设置状态码则默认成功状态const code res.data.code || 200;// 获取错误信息const msg errorCode[code] || res.data.msg || errorCode[default]// 二进制数据则直接返回if (res.request.responseType blob || res.request.responseType arraybuffer) {return res.data}if (code 401) {if (!isRelogin.show) {isRelogin.show true;MessageBox.confirm(登录状态已过期您可以继续留在该页面或者重新登录, 系统提示, { confirmButtonText: 重新登录, cancelButtonText: 取消, type: warning }).then(() {isRelogin.show false;store.dispatch(LogOut).then(() {location.href process.env.VUE_APP_CONTEXT_PATH index;})}).catch(() {isRelogin.show false;});}return Promise.reject(无效的会话或者会话已过期请重新登录。)} // else if (code 500) {// Message({ message: msg, type: error })//redis错误待解决// return Promise.reject(new Error(msg))// } else if (code 601) {Message({ message: msg, type: warning })return Promise.reject(error)} else if (code ! 200) {Notification.error({ title: msg })return Promise.reject(error)} else {return res.data}},error {console.log(err error)let { message } error;if (message Network Error) {message 后端接口连接异常;} else if (message.includes(timeout)) {message 系统接口请求超时;} else if (message.includes(Request failed with status code)) {message 系统接口 message.substr(message.length - 3) 异常;}Message({ message: message, type: error, duration: 5 * 1000 })return Promise.reject(error)}
)// 通用下载方法
export function download(url, params, filename, config) {downloadLoadingInstance Loading.service({ text: 正在下载数据请稍候, spinner: el-icon-loading, background: rgba(0, 0, 0, 0.7), })return service.post(url, params, {transformRequest: [(params) { return tansParams(params) }],headers: { Content-Type: application/x-www-form-urlencoded },responseType: blob,...config}).then(async (data) {const isBlob blobValidate(data);if (isBlob) {const blob new Blob([data])saveAs(blob, filename)} else {const resText await data.text();const rspObj JSON.parse(resText);const errMsg errorCode[rspObj.code] || rspObj.msg || errorCode[default]Message.error(errMsg);}downloadLoadingInstance.close();}).catch((r) {console.error(r)Message.error(下载文件出现错误请联系管理员)downloadLoadingInstance.close();})
}export default service