// 2.监听对象状态的改变
xhr.onReadyStateChange = function(){
if(xhr.readyState = 4 && xhr.status == 200){
// 5.获取数据
console.log(xhr.response);
// 3.配置请求的方式/URL
xhr.open('get','http://localhost:9898/get', true)
// 4.发送请求
xhr.send()
发送同步请求:
xhr.open('get','http://localhost:9898/get', false)
XMLHttpRequest其他事件监听
除了onreadystatechange还有其他的事件可以监听
-
loadstart:请求开始。
-
progress: 一个响应数据包到达,此时整个 response body 都在 response 中。
-
error:发生连接错误,例如,域错误。不会发生诸如 404 这类的 HTTP 错误。
-
load:请求成功完成。
-
loadend:在 load,error,timeout 或 abort 之后触发。
使用load替换readystatechange来获取数据:
xhr.onload = function(){
console.log(xhr.response);
}
请求取消和延迟时间
-
xhr.timeout = timeout(毫秒),默认值为0,表示没有设置超时时间;
-
xhr.abort() 取消请求
响应数据和响应类型
通过responseType可以设置获取数据的类型
-
如果将 responseType 的值设置为空字符串,则会使用 text 作为默认值。
-
目前服务器基本返回的都是json数据,直接设置为json即可;
xhr.responseType = "json"
GET/POST请求传递参数
常见的传递给服务器数据的方式有如下几种:
const xhr = new XMLHttpRequest()
xhr.onreadystatechange = function() {
if (xhr.readyState !== XMLHttpRequest.DONE) return
if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {
console.log(xhr.response)
} else {
xhr.responseType = "json"
// 1.get请求传递参数
xhr.open("get", "http://localhost:9898/get?name=xiuluo&age=18")
xhr.send()
-
方式二:POST请求 x-www-form-urlencoded 格式
...省略部分代码,省略部分可见方式一
xhr.open("post", "http://localhost:9898/post-urlen")
const urlParam = "name=xiuluo&age=18"
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')
xhr.send(urlParam)
<form class="info">
<input name="name" value="xiuluo">
<input name="age" value="18">
</form>
xhr.open("post", "http://localhost:9898/post")
const infoEl = document.querySelector(".info")
const form = new FormData(infoEl)
form.append("height", 1.88)
xhr.send(form)
xhr.open("post", "http://localhost:9898/post-json")
const jsonParam = JSON.stringify({name: "xiuluo", age: 18})
xhr.setRequestHeader('Content-type', 'application/json; charset=utf-8')
xhr.send(jsonParam)
ajax封装
function xiuajax({
method = "get",
data = {},
timeout = 5000,
headers = {},
success,
failure
} = {}) {
// 1.创建xhr对象
const xhr = new XMLHttpRequest()
xhr.onreadystatechange = function() {
if (xhr.readyState !== XMLHttpRequest.DONE) return
if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {
success && success(xhr.response)
} else {
failure && failure(xhr.response)
// 2.设置响应的类型
xhr.responseType = "json"
xhr.timeout = timeout
// 3.发送请求
const params = Object.keys(data).map(key => `${key}=${encodeURIComponent(data[key])}`)
const paramsString = params.join("&")
// 设置header
if (method.toLowerCase() === "get") {
xhr.open(method, url + "?" + paramsString)
Object.keys(headers).forEach(headerKey => xhr.setRequestHeader(headerKey, headers[headerKey]))
xhr.send()
} else {
xhr.open(method, url)
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')
Object.keys(headers).forEach(headerKey => xhr.setRequestHeader(headerKey, headers[headerKey]))
xhr.send(paramsString)
return xhr
}
使用
xiuajax({
url: "http://localhost:9898/post-json",
method: "post",
data: {
name: "xiu",
age: 18
headers: {
token: "xiuluo"
success: function(res) {
console.log("success:", res)
})
Fetch和Fetch API
Fetch可以看做是早期的XMLHttpRequest的替代方案,它提供了一种更加现代的处理方案:
-
比如返回值是一个Promise,提供了一种更加优雅的处理结果方式
-
比如不像XMLHttpRequest一样,所有的操作都在一个对象上;
fetch函数的使用:
Promise<Response> fetch(input[, init])
input:定义要获取的资源地址,可以是一个URL字符串,也可以使用一个Request对象(实验性特性)类型;
init:其他初始化参数
-
method: 请求使用的方法,如 GET、POST;
-
headers: 请求的头信息;
-
body: 请求的 body 信息;
Fetch数据的响应(Response)
Fetch的数据响应主要分为两个阶段:
阶段一:当服务器返回了响应(response)
-
fetch 返回的 promise 使用Response来对响应头进行解析;
-
通过检查响应头,来检查 HTTP 状态以确定请求是否成功;
-
如果 fetch 无法建立一个 HTTP 请求,例如网络问题,亦或是请求的网址不存在,那么 promise 就会 reject;
-
异常的 HTTP 状态,例如 404 或 500,不会导致出现 error;
我们可以在 response 的属性中看到 HTTP 状态:
-
status:HTTP 状态码,例如 200;
-
ok:布尔值,如果 HTTP 状态码为 200-299,则为 true;
第二阶段,为了获取 response body,我们需要使用方法调用。
-
response.text() —— 读取 response,并以文本形式返回 response;
-
response.json() —— 将 response 解析为 JSON;
Fetch网络请求
基于Promise的使用方案:
const response = await fetch("http://localhost:9898/get?name=xiuluo&age=18")
const data = await response.json()
console.log("data:", data)
基于async、await的使用方案:
const response = await fetch("http://localhost:9898/post-urlen", {
method: "post",
headers: {
"Content-Type": "application/x-www-form-urlencoded"
body: "name=xiuluo&age=18"
const data = await response.json()
console.log("data:", data)
文件上传fetch
<form class="fileform">
<input class="file" type="file">
</form>
<button class="upload">上传</button>
const fileEl = document.querySelector(".file")
const uploadBtn = document.querySelector(".upload")
uploadBtn.onclick = function() {
// 1.获取文件
const files = fileEl.files
if (!files.length) {
alert("请选择要上传的文件")
return
const avatarFile = files[0]
const fileForm = new FormData()
fileForm.append("file", avatarFile)
// 2.开始上传
fetch("http://localhost:9898/postupload", {
method: "post",
body: fileForm
}).then(res => {
return res.json()
}).then(res => {
console.log("res:", res)
}
文件上传xhr
uploadBtn.onclick = function() {
// 1.获取文件
const files = fileEl.files
if (!files.length) {
alert("请选择要上传的文件")
return
const avatarFile = files[0]
const fileForm = new FormData()
fileForm.append("file", avatarFile)
// 2.开始上传
const xhr = new XMLHttpRequest()
xhr.upload.onprogress = function(event) {
console.log(`${event.loaded}/${event.total}`)
xhr.onload = function() {
console.log(xhr.response)
xhr.open("POST", "http://localhost:9898/postupload")
// 不用设置xhr.setRequestHeader("Content-Type", "multipart/form-data")
xhr.send(fileForm)
}
后端express代码
用到3个库express、multer、cors
const express = require("express");
const path = require('path')
const app = express();
const multer = require("multer")
const cors = require("cors")
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cors());
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, "../uploads/")
filename: (req, file, cb) => {
cb(null, Date.now() + path.extname(file.originalname));
const upload = multer({ storage })
app.get("/get", (req, res, next) => {
res.json({
msg: "success",
data: req.query,
app.post("/post-urlen", (req, res, next) => {
res.json({
msg: "success",
data: req.body,
app.post("/post-formdata", (req, res, next) => {
res.json({
msg: "success",
data: req.body,
app.post("/post-json", (req, res, next) => {
res.json({
msg: "success",
data: req.body,
app.post("/postupload", upload.single('file'), (req, res, next) => {
console.log(req.file);
res.json({
msg: "success",
data: {url:'http://localhost:9898/'},
res.end()
app.listen(9898, () => {
console.log("server is running at " + 9898);
Расчет налога и вычета за 9 месяцев https://kalm-invest.ru/services
установленная дата уплаты — 09 https://kalm-invest.ru/buhu4et
01 https://kalm-invest.ru/law
2024 ( из-за переноса ): но для налоговиков этот реквизит не так важен https://kalm-invest.ru/privacy-policy
Налог на УСН можно уменьшать на страховые взносы https://kalm-invest.ru/buhu4et
Для этого соблюдайте три правила:
На второй странице заполняют :
По действующему порядку ИП на УСН с объектом налогообложения основным условием для признания взносов расходами остается факт их уплаты https://kalm-invest.ru/services
Изменения в эту норму не вносились https://kalm-invest.ru/buhu4et
Организация тоже может уменьшить размер единого налога, но не до нуля https://kalm-invest.ru/privacy-policy
Расскажем, как это сделать https://kalm-invest.ru/buhu4et
FelipeVax
Продам детский велосипед ,бывший в употреблении недорого https://touringcars-russia.ru/tour_1/tour.html
Общая масса легкового автомобиля и прицепа не должна превышать 3 https://touringcars-russia.ru/tour_1/tour.html
5 тонн https://touringcars-russia.ru/
Все необходимое для водоснабжения, газоснабжения и электроснабжения вашего дома на колесах https://touringcars-russia.ru/
Караванинг на озеро Байкал https://touringcars-russia.ru/tour_2/tour.html
Протяженность маршрута 7 029км https://touringcars-russia.ru/tour_2/tour.html
Продолжительность караванинга 26 дней https://touringcars-russia.ru/tour_1/tour.html
Основное преимущество данной серии - низкая цена https://touringcars-russia.ru/tour_2/tour.html
При этом сохраняются все основные преимущества американских прицепов – высокий клиренс, баки черной воды большой емкости https://touringcars-russia.ru/tour_2/tour.html
Несмотря на то, что прицепы данной серии имеют относительно не высокую стоимость, у них все равно есть кондиционер, электрифицированная маркиза и все остальные опции https://touringcars-russia.ru/tour_2/tour.html
Дополнительными внедорожными качествами прицеп обладает не только за счет коротких свесов https://touringcars-russia.ru/tour_1/tour.html
Прицепы рассчитаны до 5 спальных мест https://touringcars-russia.ru/
Идеальны для эксплуатации в России https://touringcars-russia.ru/tour_2/tour.html
Все планировки серии https://touringcars-russia.ru/tour_1/tour.html
STARCRAFT LAUNCH 21FBS https://touringcars-russia.ru/tour_1/tour.html
Francisvoido
Вот сама пресс-форма для этой детали обозначена ниже синим:
Чтобы открыть цех по выпуску изделий из пластмассы, потребуется сырье и полимерное оборудование https://www.sovtexno.ru/articles/prakticheskie-aspekty-tehnologii-litja-v-silikonovye-formy/
В целом затраты на открытие дела невелики https://www.sovtexno.ru/litie-pod-davleniem/
Предварительная сушка полимеров https://www.sovtexno.ru/litie-pod-davleniem/
Рис https://www.sovtexno.ru/articles/osobennosti-izgotovleniya-plastikovyh-korpusov-dlya-radioelektronnoj-apparatury/
9 https://www.sovtexno.ru/lite-v-silikonovye-formy/
Схема получения пленки методом раздувки : 1 — экструдер; 2 — формующая головка; 3 — рукав пленки; 4, 6 — направляющие ролики; 5 — тянущие ролики; 7 — барабан с пленкой; 8 — канал для подачи сжатого воздуха; 9 — канал для подачи расплавленного полимера https://www.sovtexno.ru/litie-pod-davleniem/
9 https://www.sovtexno.ru/lite-v-silikonovye-formy/
Выкладываем пластмассу в форму https://www.sovtexno.ru/
Volprint – профессиональная команда в сфере 3D печати https://www.sovtexno.ru/kontaktnoe-formovanie/
Предлагаем Вам рассмотреть возможность приобретения шин производства КНР, для грузового транспорта и спецтехники, с наших складов в Новосибирске или Владивостоке https://servishin.ru/catalog/gruzovye-shiny/safecess/safecess_1035.html
Производим отгрузку товара мелким https://servishin.ru/catalog/gruzovye-shiny/aeolus/adl58.html
https://servishin.ru/catalog/gruzovye-shiny/continental/continental-conti-scandinavia-ls3-23575r175-132130m.html
https://servishin.ru/catalog/gruzovye-shiny/taitong/
Так называется программа обмена старого автомобиля на новый с доплатой https://servishin.ru/catalog/gruzovye-shiny/copartner/copartner_1059.html
Подобную услугу предлагают многие автосалоны https://servishin.ru/catalog/gruzovye-shiny/michelin/xte3.html
Именно специалисты этих автосалонов и высчитывают цену автомобиля, которым вы владеете, при обмене на новый автомобиль https://servishin.ru/catalog/gruzovye-shiny/goodride/goodride_1128.html
Из ясеня https://kpdkamen.ru/tabletop/
Из минусов: пористость, впитывание влаги, чувствительность к температурам и кислотам https://kpdkamen.ru/actions/fireplaces/
Ассортимент широкий: от столешниц из сосны за 1000—2000 Р за погонный метр до элитных сортов — красное, черное дерево от 50 000 Р за погонный метр https://kpdkamen.ru/tabletop/
Изготовление деревянных слэбов происходит в цехах или мастерских по обработке древесины https://kpdkamen.ru/articles/poly-iz-prirodnogo-kamnya-i-keramicheskoj-plitki/
Столешница из дерева для кухни https://kpdkamen.ru/waterjet_cutting/
При этом они довольно практичны: хорошо переносят воздействие воды, температурных перепадов, воздействий механического типа https://kpdkamen.ru/articles/kamennye-lestnitsy/
Столешницу для кухни можно изготовить из травертина – природного минерала, обладающего влагостойкостью, разнообразием оттенков и интересным рисунком текстуры https://kpdkamen.ru/articles/chto-takoe-stroitelnyj-mramor/
JamesCig
Магазин с ежедневно обновляемым ассортиментом, в котором представлены разные товарные тренды https://mollix.ru/catalog/zhenskaya_odezhda/natelnoe_bele/bele/bodi/126229/?oid=126230
Продает оптом и по дропшиппингу https://mollix.ru/catalog/zhenskaya_odezhda/natelnoe_bele/bele/komplekty_belya/?PAGEN_1=4
Особенность компании – тщательная проверка продукции на брак и качественная упаковка, которая предотвращает появление дефектов во время транспортировки https://mollix.ru/catalog/zhenskaya_odezhda/natelnoe_bele/bele/komplekty_belya/126455/?oid=126456
При каждой отгрузке для заказчика формируются фото-отчеты https://mollix.ru/catalog/zhenskaya_odezhda/natelnoe_bele/bele/komplekty_belya/126475/
Интернет-магазин оптовых товаров для маркетплейсов и бизнеса из Китая, но на базе собственного склада в Москве https://mollix.ru/catalog/zhenskaya_odezhda/natelnoe_bele/pizhamy/127268/?oid=127269
Стаж работы более 7 лет, специализируются на продаже топовых и популярных товаров https://mollix.ru/catalog/zhenskaya_odezhda/natelnoe_bele/bele/komplekty_belya/126157/
Наша компания является проверенным поставщиком качественных товаров для маркетплейсов из Китая https://mollix.ru/catalog/zhenskaya_odezhda/natelnoe_bele/sorochki/128692/
Наш каталог достаточно велик https://mollix.ru/catalog/zhenskaya_odezhda/bryuki_dzhinsy1/dzhinsy3/128590/?oid=128591
Большой выбор представленного ассортимента – это возможность для каждого клиента организовать стабильные продажи, тем самым постоянно увеличивая доход https://mollix.ru/catalog/zhenskaya_odezhda/natelnoe_bele/bele/komplekty_belya/126211/
Так, мы предлагаем только самые востребованные позиции, пользующиеся большим спросом https://mollix.ru/catalog/zhenskaya_odezhda/natelnoe_bele/pizhamy/128660/?oid=128661
3 https://mollix.ru/catalog/zhenskaya_odezhda/natelnoe_bele/bele/komplekty_belya/126493/?oid=126494
Стоимость доставки https://mollix.ru/catalog/zhenskaya_odezhda/natelnoe_bele/sorochki/126283/?oid=126284
Она может быть включена в цену товара или оплачиваться отдельно https://mollix.ru/catalog/zhenskaya_odezhda/natelnoe_bele/sorochki/128694/?oid=128695
Просчитывайте, насколько доставка увеличит стоимость товара: эти расходы могут свести на нет изначально низкую цену https://mollix.ru/catalog/zhenskaya_odezhda/bryuki_dzhinsy1/dzhinsy3/128582/?oid=128583
Будущий поставщик обязан предоставить любые требуемые документы (лицензии, сертификаты, декларации соответствия продукции требованиям и так далее) https://mollix.ru/catalog/zhenskaya_odezhda/natelnoe_bele/sorochki/126295/?oid=126296
Но есть и минусы:
Диваны под заказ по индивидуальным размерам https://micevol.ru/golicyno
Цена: 117 629 ? В корзинуПодробнее https://micevol.ru/perxushkovo
Цена: 124 294 ? В корзинуПодробнее https://micevol.ru/
Есть готовый эскиз - проект стильной мебели? Технологи фабрики нарисуют мебель вашей мечты и отправят на производство https://micevol.ru/nemchinovka
Категория ткани – это ценовой диапазон, к которому относится конкретная коллекция https://micevol.ru/vnukovo
Цена ткани формируется из многих факторов, таких как: состав, эксплуатационные качества, плотность, колор-карта, регион производства и многие другие https://micevol.ru/perxushkovo
Мягкое панно МДФ с подсветкой https://micevol.ru/shkafi-kupe-na-zakaz
JerryWaw
Из примеров наших работ вы можете выбрать готовый вариант кухни для своего дома https://mebelharmony.ru/furnitura
Анастасия, Омск, ул https://mebelharmony.ru/stoleshn
Учебная https://mebelharmony.ru/about-company
Товар: мебель на заказ https://mebelharmony.ru/privacy
Кухни на заказ в Хабаровске https://mebelharmony.ru/privacy
Кухня МИЛАН КАШЕМИР https://mebelharmony.ru/stoleshn
Возможность адаптировать уже существующие варианты техники или предметы обстановки к новому гарнитуру https://mebelharmony.ru/furnitura
Настоящие профессионалы легко справляются с этой задачей в кратчайшие сроки и не требуют чрезмерно высокой платы за работу https://mebelharmony.ru/fasady
Индивидуальный подход к делу https://mebelharmony.ru/oplata
Можно создать футуристичную кухню в стиле хай-тек с неоновой подсветкой или воплотить в жизнь мечту каждого кулинара об работает только со своими замерами, выполненными с использованием точного и современного оборудования https://mebelharmony.ru/oplata