Мне не нравится использовать jQuery. (Сугубо эстетические мотивы и мой перфекционизм заставляют меня избегать фреймворков и писать на чистом языке).
Но, сами понимаете, - писать ajax на без jQuery - ещё хуже. Там очень много буков, в которых нужно разобраться. Есть ли способ подключить к своему скрипту только ajax из jQuery? Может кто-то где то вырезал эту часть jQuery?
Если такого нигде нет, не могли бы вы подсказать какие нибудь уроки/статьи/курсы, в которых можно понять - как писать ajax на чистом js. Спасибо.
В первую очередь нужно научиться сериализовывать данные.
Ниже приведена упрощённая реализация, не поддерживающая многократно вложенные данные.
Лучше всего взять готовую реализацию, например, $.param
из того же jQuery
Далее воспроизводим обычный сниппет ajax вызова. Обработка результатов может быть разной, тут я использовал стандартный для nodejs callback-style, с сигнатурой function next(error, result)
.
function ajaxPost(uri, data, next) {
function serialize(data) {
var parts = [];
for (var k in data) {
if (Array.isArray(data[k])) {
parts.push(encodeURIComponent(k) + '[]=' + encodeURIComponent(data[k]))
} else if (typeof data[k] === 'object') {
for (var objk in data[k]) parts.push(encodeURIComponent(k + '[' + objk + ']') + '=' + encodeURIComponent(data[k][objk]))
} else {
parts.push(encodeURIComponent(k) + '=' + encodeURIComponent(data[k]))
}
}
return parts.join('&');
}
// Далее стандартный сниппет:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (xhr.status === 200) {
next(null, xhr.responseText);
} else {
next(xhr.responseText);
}
}
}
xhr.open("POST", uri, true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send(serialize(data));
}
ajaxPost('https://httpbin.org/post', {
max: 5,
min: 2,
list: [1, 2, 5],
obj: {a: 'some', b: 42}
}, function(err, res) {
if (err) return console.error(err);
console.log(res);
})
Если вы не ограничены поддержкой старых браузеров, рекомендую всё же использовать новый синтаксис fetch
.
Сериализация всё ещё остаётся на вашей совести, в данном примере я демонстрирую json:
fetch('https://httpbin.org/post', {
method: 'post',
headers: {
'Accept': 'application/json, text/plain, */*',
'Content-Type': 'application/json'
},
body: JSON.stringify({a: 7, str: 'Some string: &=&'})
}).then(res => res.json())
.then(res => console.log(res));
Разобрался таки в ajax без jQuery (немного). Для своих целей сделал такую функцию:
var ajax = function (requestObject) {
request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (request.readyState == 4 && request.status == 200) {
requestObject.success(request.responseText);
}
}
request.open("POST", requestObject.direction, true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
data = "min=" + requestObject.min + "&max=" + requestObject.max;
request.send(data);
}
И вызов:
button.onclick = function () {
ajax({
direction: "num.php",
min: document.querySelector("#min").value,
max: document.querySelector("#max").value,
success: function (data) {
document.querySelector("#res").innerHTML = data;
}
});
}
Чем то напоминает функцию jQuery, но эта только для моих целей, совсем не гибкая. Если поработать над ней, то можно сделать универсальную функцию, которую можно будет использовать где угодно. (А мне пока этого зватит)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Всем привет, нужна ваше помочи возможно как то скопировать движок этого Инструмента либо если есть у кого нибудь идеи как можно сделать?...
У меня есть обычная html форма, которая проходит валидацию на frontend и на backendНа frontend валидация осуществляется при помощи плагина jQuery validate, а на backend...