• Как подключить ресурс 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 комментария
  • Как прибавить цену элементов, выбранных через checkbox, к уже существующей цене?

    XanXanXan
    @XanXanXan
    const sumForm = document.forms.Sum;
    const totalBlock = document.querySelector('#sum');
    const baseValue = 500;
    
    sumForm.addEventListener('change', () => {
        const checkedImputValues = Array.from(
            document.querySelectorAll('.form-check-input:checked'),
            input => Number(input.value)
        );
    
        const servicesSum = (checkedImputValues.length !== 0)
            ? checkedImputValues.reduce((a, b) => a + b)
            : 0;
    
        totalBlock.textContent = servicesSum + baseValue;
    });
    Ответ написан
    3 комментария