Ответы пользователя по тегу JavaScript
  • Как вызвать функцию Python из JavaScript?

    @iddqda
    network engineer, netdevops
    Ну по сути тебе надо создать веб приложение
    где бекенд будет вызывать твою готовую функцию, а на фронте форма из пары полей ввода и кнопки, на которую вешается обработчик на JS

    для бекенда я бы использовал FastAPI
    что-то типа такого:

    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get("/dialog/")
    def read_item(message: str, lang: str = 'ru'):
        return {'message': detect_intent_texts(TOKEN, SESSION_ID, message, lang)


    На фронте обычный JS fetch GET c параметрами (или POST, просто он чуть сложнее для бека)

    document.querySelector("#button").addEventListener("click", (event) => {
        const msg = document.querySelector("#message").value;
        const lang = document.querySelector("#lang").value;
    
        fetch('/dialog/?' + new URLSearchParams({
            message: msg,
            lang: lang,
        }))
            .then((response) => {
                if (!response.ok) {
                    throw new Error("HTTP error, status = " + response.status);
                }
                return response.json();
            })
            .then((data) => {
                alert(data.message);
            })
            .catch((error) => {
                alert(error);
            });
    });


    з.ы. у меня одноклассник был с таким именем
    Ответ написан
    Комментировать
  • Как в JS сделать запрос, аналогичный submit form в html?

    @iddqda
    network engineer, netdevops
    как то вот так:
    const formData = new FormData();
    const photos = document.querySelector('input[type="file"][multiple]');
    
    formData.append('title', 'My Vegas Vacation');
    for (let i = 0; i < photos.files.length; i++) {
      formData.append('photos', photos.files[i]);
    }
    
    fetch('https://example.com/posts', {
      method: 'POST',
      body: formData,
    })
    .then(response => response.json())
    .then(result => {
      console.log('Success:', result);
    })
    .catch(error => {
      console.error('Error:', error);
    });


    цельнотянуто отсюда: https://developer.mozilla.org/en-US/docs/Web/API/F...
    Ответ написан
    Комментировать
  • Отправка файла на сервер на чистом javascript?

    @iddqda
    network engineer, netdevops
    Комментировать
  • Как лучше обыграть валидацию форм, если на странице 2 формы?

    @iddqda
    network engineer, netdevops
    во первых валидацию можно написать на js
    document.getElementById("myForm").addEventListener('submit', (event) => {        
            const data = new FormData(event.target);
            if(!formValid(data)) {
                  event.preventDefault();  // отменяем action формы
                  return;
            }
    })


    а во вторых можно не перегружать страницу
    точно так же сделать свой обработчик на submit
    в нем fetch post (ajax умер давно)
    document.getElementById("myForm").addEventListener('submit', (event) => {             
            const data = new FormData(event.target);
            fetch("/register", {
                method: 'POST',                                            
                body: data
            })
            .then((response) => response.json())
            .then((data) => {
                // тут рисуешь алерты в DOM
            })
            .catch((error) => {            
                console.log(`fetch.post response came up with an error: ${error}`);
            });
            event.preventDefault();
        })

    а со стороны фляги
    if request.method == 'POST':               
       data = request.form
       ok, err = validateForm(data)
       if not ok:
           return jsonify(err)
       DoRegisterUser(data)
       return redirect(url_for(index))


    в третьих если все же хочется оставить валидаторы wtf то просто надо сохранить состояние карточки
    для этого при переворачивании карточки добавить/убрать бит в cookie
    а при перезагрузке страницы прочитать этот бит и повернуть карточку нужной стороной
    https://www.w3schools.com/js/js_cookies.asp

    з.ы. может все совсем не так. я не настоящий сварщик (с)
    Ответ написан
    Комментировать
  • Как преобразовать строку в оператор?

    @iddqda
    network engineer, netdevops
    еще можно сделать как в питоне
    d = {'+': (a,b) => a+b, '-': (a,b) => a-b }
    const sum = '+'
    d[sum](123,321)
    444
    
    const minus = '-'
    d[minus](123,321)
    -198


    хотя это тот же свич по сути
    Ответ написан
    Комментировать
  • Как считать кол-во повторяющихся эл-ов в массиве?

    @iddqda
    network engineer, netdevops
    я подобное примерно так делаю:
    let arr = [1,3,3,4,5,5,5];
    obj = new Object();
    arr.forEach((el)=>(obj.hasOwnProperty(el)) ? obj[el]++ : obj[el] = 1);
    console.log(obj); // Object { 1: 1, 3: 2, 4: 1, 5: 3 }

    ну т.е. использую свойство объекта - уникальность ключей
    Ответ написан
    Комментировать
  • Как передать переменную из Flask в JavaScript?

    @iddqda
    network engineer, netdevops
    Вот так примерно

    html:
    <div>
        <button id="jsfetch">fetch json</button>
      </div>

    js:
    document.querySelector("#jsfetch").addEventListener("click", Handler);
    function Handler(event) {
        fetch('/api')
            .then((response) => {
                return response.json();
            })
            .then((myjson) => {
                console.log(myjson);
            });
    }


    flask:
    from flask import jsonify
    data = { 
        "id": 123,
        "name": "Вася",
        "surname": "Пупкин"
    }
    
    @app.route('/api')
    def api():
        return jsonify(data)


    Запускаешь, нажимаешь на кнопку и видишь в консоли браузера:
    Object { id: 123, name: "Вася", surname: "Пупкин" }
    Ответ написан
    Комментировать
  • Передача параметров в css из Json?

    @iddqda
    network engineer, netdevops
    первым способом не уверен, что возможно,
    а динамически как то так бы попробовал:

    jstr.global.forEach((a) => 
       document.querySelectorAll(".Layer + a.id").forEach((el) => 
            { el.style.width  = a.width; el.style.height = a.height }))
    Ответ написан
    Комментировать
  • Как можно сократить данный код?

    @iddqda
    network engineer, netdevops
    div:hover {
        opacity: 0.4;
    }
    Ответ написан
    Комментировать
  • Как решается эта задача?

    @iddqda
    network engineer, netdevops
    я вобще не прграммер, поэтому не претендую,
    но сделал как то вот так примерно:

    function LetterChanges(str) { 
      const alphabet = 'abcdefjhijklmnopqrstuvwxyz_'
      const vowel = 'aeiou'
    
      return str.toLowerCase().split('').map((c) => {     
        c = alphabet[alphabet.indexOf(c)+1];
        if (vowel.includes(c)) c = c.toUpperCase();
        if (c === "_") c = "A"
        console.log(c);
        return c;
      }).join('');   
    }


    з.ы. почему вопрос относится к категории сложный?
    такие задачи на второй неделе обучения щелкают.
    Ответ написан
    Комментировать