btn_send.addEventListener('click',async() => {
let blob = await new Promise(resolve => canvasElem.toBlob(resolve, 'image/png'));
let formData = new FormData(); // Создаем объект формы для наполнения данными, словно мы работаем с тегом form в html.
formData.append('canvas_field', blob, 'canvas.png'); // это эквивалент тому, что в нашей html форме создаем поле input type="file" name="canvas_field" value="canvas.png" и прикрепляем туда содержимое blob (метод append сам расшаривает blob, дополнительных преобразований не требуется). Естественно, на DOM-дереве это никак не отразится, это модель формы в памяти JS.
let response = await fetch('web_tp_word.php', {
method: 'POST',
body: formData // для fetch не нужно дополнительных параметров, чтобы объяснить как работать с formData. Идеально, чтобы завернуть файл в форму и отправить на сервер.
});
});
var_dump($_FILES['canvas_field']); // Сервер при вызове скрипта сложит данные файла во временный файл, а как их получить - в $_FILES. Далее можно обрабатывать всеми теми способами, предназначенные для работы с $_FILES. И после уже неважно, как их сгенерировали на клиенте.
...args
arguments
какая из реализаций лучше?
<select id="selectTheme" onchange="alert('Theme changed')">
</select>
sel.addEventListener('change', (event) => {
alert('Theme changed');
})
$('select').val(chooseItem).attr('selected', 'selected');
$('select option[selected]').removeAttr('selected'); // удаление ранее установленного selected атрибута у одного из option
$('select option[value="' + chooseItem + '"]').attr('selected', 'selected'); // находим option с нужным value и устанавливаем атрибут selected
if('document' in data.noticeInfo)
{
}
if(data.noticeInfo.hasOwnProperty('document'))
{
}
if(typeof data.noticeInfo.document != "undefined" && data.noticeInfo.document !== null)
{
}
{
100: // groupId
{
1: [1, 3], // source: [id, id, .....]
2: [2]
},
......
}
<script type="text/javascript">
$( "form" ).submit(function( event ) {
event.preventDefault();
var formData = new FormData();
formData.append("f1", document.querySelector("input[name='f1']").value);
formData.append("f2", document.querySelector("input[name='f2']").value);
formData.append("f3", document.querySelector("textarea[name='f3']").value);
var request = new XMLHttpRequest();
request.open('POST', 'http://mydape.ru');
request.onload = function()
{
window.location.href="https://google.com"; // перенаправляем на гугль.
};
request.send(formData);
});
</script>
<form .... onsubmit="my_submit(e)">
...
<label>Имя</label>
<input id="field_name_showed" type="text" value=""> <!-- Поле, которое видит пользователь -->
<input id="field_name_hidden" type="hidden" value=""> <!-- Скрытое поле для отправки -->
function my_submit(e)
{
e.preventDefault(); // останавливаете выполнение сабмита
document.getElementById("field_name_hidden").value = document.getElementById("field_name_showed").value + " (добавленный текст)"; // добавляете в скрытое поле формы имя и что хотели еще.
e.target.submit(); // перезапускаете сабмит формы
}
function init_counter_time()
{
var d = new Date();
d.setDate(d.getDate() - (d.getDay() + 6 ) % 7 + 7);
d.setHours(0);
d.setMinutes(d.getTimezoneOffset()); // компенсируем смещение временной зоны у пользователя.
d.setSeconds(0);
d.setMilliseconds(0);
return d.getTime(); // обратите внимание, что время извлекается по таймзоне +0000!!!
}
// var countDownDate = new Date('10 October 2020 21:00').getTime();
var countDownDate = init_counter_time();
if (distance < 0) {
// clearInterval(x);
countDownDate = init_counter_time();
}
if (question === 1||3)
if (question === 1|| question === 3)
if ([1,3].indexOf(question) > -1)
function RST(str){
let arr = str.split('');
let num = 1;
let result = '';
for(let i = 1; i < arr.length; i++){
if(arr[i] == arr[i-1]){
num++;
} else {
result += arr[i-1] + num; // тут была ошибка
num = 1;
}
}
// Нужно допечатать последнее накопление num
if(arr.length > 0)
result += arr[arr.length-1] + num;
return result;
}
var item_count = array.length; // считаем заранее кол-во
for(var i = 0; i < item_count; i++)
{
var item = array[i]; // вытаскиваем ссылку на элемент для простоты доступа
...
}