Ответы пользователя по тегу JavaScript
  • POST Запрос работает только после второго попытка и перезагрузка страницы?

    Real_Fermer
    @Real_Fermer
    Программист PHP
    в зачем у вас одновременно
    await
    и
    .then()
    вы либо крестик снимите, либо трусы наденьте (С).
    вам все должно придти в
    const result=await fetch(reg, {....}
    Ответ написан
  • Как подключить ресурс kladr-api к input через JS или PHP?

    Real_Fermer
    @Real_Fermer
    Программист PHP
    js скрипт где происходит обработка ввода в input и вывод результата

    window.addEventListener('load', function (e) {  
    
      document.querySelectorAll('[name="street"]').forEach(function (el, indx) {
        el.addEventListener('input', async (e) => {    
    
          let street_name=el.value
    
    if(street_name.length>3){
      let data = {
        adress: street_name,
        task:'getKladr'
      }
      let url = '/controllers/ajax.php'
      let response = await fetch(url, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded'
        },
        body: 'data='+JSON.stringify(data)
      })
    
      let result = await response.json();
      let eladd_res=document.getElementById("address")
      eladd_res.innerHTML=""
      let json=JSON.parse(result)
    
      console.log(json)
    
      let html=""
    
      Object.entries(json.result).forEach(([key, value]) => {
        html+="<p>"+value["name"]+"</p>"
      })
    
      eladd_res.innerHTML=html
      console.log(json['result'])
    }
        })
      })
    })


    Скрипт /controllers/ajax.php - куда отправляется AJAX запрос

    require_once $_SERVER['DOCUMENT_ROOT']."/models/kladr.php";
    
    $res=GetInput();
    
    echo json_encode($res);
    
    function GetInput()
    {
                $data=getData();
                return call_user_func($data['task'],$data);
    }
    function getData() : array{
        $method=$_SERVER['REQUEST_METHOD'];
        $_vars=[];
        switch ($method){
            case 'GET':
                $_vars=requestGet();
                break;
            case 'POST':
                $_vars=requestPost();
                break;
        }
        return $_vars;
    }
     function requestGet() : array{
            return $_GET;
        }
        function requestPost() : array{
            return json_decode($_POST['data'],true);
        }
    
    function getKladr($data){
    
        $kladr= new Kladr();
    
        $res=$kladr->getStreet($data['adress']);
    
        return $res;
    }

    Сам класс Kladr /models/kladr.php откуда происходит вызов API и обработка ответа
    class Kladr
    {
        private $api_key;
    
        public function __construct()
        {
            //$this->api_key = KLADRAPIKEY; //не понадобился        
        }
    
        public function getStreet($street){
            $res=$this->request($street, "street", "2300000600000");
    
            return $res;
        }
    
        private function request($adress, $type, $cityid)
        {
            $res=[];
            $base_url = "https://kladr-api.ru/api.php?";
            $query_data = [
            //    'token'  => $this->api_key,
                'query'  => $adress,
                'contentType'   => !empty($type) ? $type : "street",
                'cityId' => !empty($cityid) ? $cityid : "2900000100000",
            ];
            $data_get = http_build_query($query_data);
            $url = $base_url.$data_get;
            //query=Ломоносова &contentType=street &cityId=2900000100000
           // $url="https://kladr-api.ru/api.php?query=Анапск&contentType=street&cityid=2900000100000&limit=5";
    
            $ch = curl_init();
            $defaults = [
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_URL => $url,
                CURLOPT_HTTPGET => true,
                CURLOPT_TIMEOUT => 10,
            ];
    
            $curl = curl_init();
            curl_setopt_array($curl, $defaults);
            $response = json_decode(curl_exec($curl), true);
    
            $curlErrorNumber = curl_errno($curl);
    
            if ($curlErrorNumber) {
                $res['error']['msg'] = 'Error curl';
                $res['error']['uri'] = $url;
                $res['error']['curl_n'] = $curlErrorNumber;
                curl_close($curl);
          
            } else {
                $res = curl_exec($curl);
                curl_close($curl);
            }
    
          
    
            return $res;
    
        }
    }


    Если ответ подошел. Поставьте пожалуйста отметку - ответ
    Ответ написан
    2 комментария
  • Как измерить расстояние между двумя пунктами в Yandex Maps API?

    Real_Fermer
    @Real_Fermer
    Программист PHP
    Постройте маршрут
    multiRoute = new ymaps.multiRouter.MultiRoute({
    
                        // Описание опорных точек мультимаршрута.
                        referencePoints: [
                            coord_start,
                            coord_end
                        ],
                        // Параметры маршрутизации.
                        params: {
                            // Ограничение на максимальное количество маршрутов, возвращаемое маршрутизатором.
                            results: 1
                        }
                    }, {
                        // Автоматически устанавливать границы карты так, чтобы маршрут был виден целиком.
                        boundsAutoApply: true
                    });
                    myMap.geoObjects.add(multiRoute);
    multiRoute = new ymaps.multiRouter.MultiRoute({
    
                        // Описание опорных точек мультимаршрута.
                        referencePoints: [
                            coord_start,
                            coord_end
                        ],
                        // Параметры маршрутизации.
                        params: {
                            // Ограничение на максимальное количество маршрутов, возвращаемое маршрутизатором.
                            results: 1
                        }
                    }, {
                        // Автоматически устанавливать границы карты так, чтобы маршрут был виден целиком.
                        boundsAutoApply: true
                    });
                    myMap.geoObjects.add(multiRoute);
    //и получите растояние
    let distance = multiRoute.getActiveRoute().properties.get("distance")
                    let distance_km = Math.round(distance.value / 1000)
    Ответ написан
    Комментировать
  • Как можно полностью подгрузить страницу из другой страницы?

    Real_Fermer
    @Real_Fermer
    Программист PHP
    Вы пытаетесь забрать страницу вместе со всеми подключаемыми js ысриптаим в том числе и с подключаемыми удаленно - счетчики, jq и бог весть еще что.
    Заберите только тег body - а все что есть в теге head подключите у себя на странице заранее
    Ответ написан
    Комментировать
  • Корректно ли делать навигацию по DOM через индекс элементов?

    Real_Fermer
    @Real_Fermer
    Программист PHP
    наверное так все-таки лучше. Вы же не всегда знаете сколько у вас элементов с данным классом на странице

    var els = document.getElementsByClassName(className);
    els .forEach(function (el, index) {
    el.addEventListener('click',(e)=>{
    console.log('click')
    })
    Ответ написан
  • Как отправить данные формы через ajax?

    Real_Fermer
    @Real_Fermer
    Программист PHP
    $.ajax({
    type: "POST",
    url:"",

    В url - адрес скрипта куда отправляется запрос

    В скрипте

    echo json_encode($_POST)
    Ответ написан
  • Как загрузить шрифт по действию js?

    Real_Fermer
    @Real_Fermer
    Программист PHP
    Возможно не стоит загружать шрифт.
    Гораздо проще поменять css

    let el_summ = document.querySelector('#summ')
    //свойство добавится к элементу
    el_summ.style.fontFamily="Ваш шрифт"

    el_summ.classList.add('newClass')
    Ответ написан
  • Как расчитать доставку для поля адреса на яндекс карте?

    Real_Fermer
    @Real_Fermer
    Программист PHP


    Дополнительно на саму карту добавил елемент searchControl - родной поиск яндекса
    если он не нужен - уберите строчку myMap.controls.add(searchControl);
    Ответ написан
    3 комментария
  • Как передать значение переменной js в php скрипт для отправки на email?

    Real_Fermer
    @Real_Fermer
    Программист PHP
    Не совсем понятно что у тебя не работает.
    Если не отправляется AJAX запрос то возможно у тебя нет form на странице. и либо надо верстку переделать, либо запрос
    $("form").submit(function() { //Change
    Ответ написан
    Комментировать