R
R
RecentForce992021-08-13 00:45:51
AJAX
RecentForce99, 2021-08-13 00:45:51

How to send data to server with Ajax in pure JavaScript?

I have already implemented this data send in jQuery with the same code in PHP. But it's impossible to do it on pure JS, please tell me.
PS I know that getting data from inputs is not correct, I could not get data from them without refreshing the page.

<input class="form-control" id="login" type="text" name="login" placeholder="Login">
    <input class="form-control" id="email" type="email" name="email" placeholder="Email">
    <input class="form-control" id="password" type="password" name="password" placeholder="Password">
    <input class="form-control" id="conf_password" type="password" name="conf_password" placeholder="Confirm password">
    <button class="button form-control" id="button">Submit</button>


function sendRequest (method, url, body) {
        const xhr = new XMLHttpRequest()
        return new Promise(function (resolve, reject) {

            xhr.open(method, url)

            xhr.responseType = 'json'
            xhr.setRequestHeader('Content-type', 'application/json')


            xhr.onload = () => {
                if (xhr.status >= 400) {
                    reject('Ошибка')
                } else {
                    resolve(xhr.response)
                }
            }
            xhr.send(JSON.stringify(body))
        })

    }

     
 let btn = document.querySelector('.button ')
       let loginValue = document.querySelector('.login').value
       let emailValue = document.querySelector('.email').value
       let passwordValue = document.querySelector('.password').value
      let conf_passwordValue = document.querySelector('.conf_password').value
        data = {
         'login': loginValue,
         'email': emailValue,
         'password': passwordValue,
         'conf_password': conf_passwordValue
     }
    sendRequest('POST', 'some.php', data)
        .then(data => console.log(data))
        .catch(err => console.log(err))

$data = [
    'login' => $_POST['login'],
    'email' => $_POST['email'],
    'password'=> password_hash($data['pass'], PASSWORD_DEFAULT),

];
if ($data['pass'] != $data['conf_password']) {
http_response_code(400);

$error = [
    'status' => 400,
    'message' => 'Пароли не совпадают'
];

//echo json_encode($error);

$_SESSION['errorSignUp'] = 'Ваши пароли не совпадают';
return header('Location: signup');

exit();
}



$connection = new PDO("mysql:host=test2;dbname=api", "mysql", "mysql");
$sql = "INSERT INTO `posts` (`login`, `email`, `password`)
VALUES (:login, :email, :password)";
$stmt = $connection->prepare($sql);
$result = $stmt->execute($data);    

print_r($result);

Answer the question

In order to leave comments, you need to log in

2 answer(s)
N
Nadim Zakirov, 2021-08-13
@RecentForce99

Send data like this:

spoiler
// Ждем когда элементы на странице прогрузятся:

document.addEventListener('DOMContentLoaded', function() {

  // Вешаем на кпопку обработчик клика, чтобы при каждом клике
  // сразу запускалась функц я dataSend отвечающая за отправку данных:
  
  document.querySelector('.button').addEventListener('click', dataSend);
  
});

// Функция для отправки данных на сервер:

async function dataSend() {

  // Получаем данные с нужных нам полей в переменные:
  
  var loginValue = document.querySelector('.login').value
  var emailValue = document.querySelector('.email').value
  var passwordValue = document.querySelector('.password').value
  var conf_passwordValue = document.querySelector('.conf_password').value

  // Создаем объект с данными:

  var data = {
    'login': loginValue,
    'email': emailValue,
    'password': passwordValue,
    'conf_password': conf_passwordValue
  }

  // Конвертируем объект в JSON:

  var json = JSON.stringify(data);

  // Отправялеям полученный JSON на сервер обычным POST-запросом:

  var response = await (await fetch('https://yousite.ru/handler.php', {
    'method': 'POST',
    'headers': {
      'Content-Type': 'application/json; charset=utf-8'
    },
    'body': json
  })).text();

  // Выводим ответ сервера в консоли:

  console.log('Ответ сервера:');
  console.log(response);

}

Replace only the link to the php handler with your own. Further, it is necessary to accept the data sent as JSON in a different way. An example of getting data sent as JSON:
spoiler
<?php

// Включим показ ошибок:

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

// Считываем полученный JSON:

$json = file_get_contents('php://input');

// Раскодируем JSON в массив:

$array = json_decode($json, true);

// Выведем массив, чтобы посмотиеть, что в нем:

header('Content-Type: text/plain; charset=UTF-8'); // Указыавем браузеру, что ответ будет обычным текстом
echo "Из браузера получены следующие данные:\n"; // Выведем текст-предупреждение
print_r($array); // Выведем все, что находится в массиве

I
Ivan Kulakov, 2021-08-13
@ivankprod

Place the xhr declaration inside return new Promise.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question