Stripe - Отправить форму с помощью AJAX

Я использую Полосатые элементы для создания платежа и контролирую внешний вид формы. Я получил, что он работает хорошо, попадая в Маршрут через действие формы при отправке. Однако теперь я хочу попробовать отправить запрос POST без изменения / загрузки страницы. Я полагаю, что лучше всего это сделать через AJAX. Я пытался это сделать, но не могу получить ответ 200 с помощью JSON. Ниже я включил фрагменты кода. Буду признателен за любую помощь в том, где я ошибаюсь.

JS

//snippet

const form = document.getElementById('payment-form');
form.addEventListener('submit', async (event) => {
    event.preventDefault();
    const {token, error} = await stripe.createToken(card);
    if (error) {
        const errorElement = document.getElementById('card-errors');
        errorElement.textContent = error.message;
     } else {
        stripeTokenHandler(token);
    }
});

const stripeTokenHandler = (token) => {
const form = document.getElementById('payment-form');
const hiddenInput = document.createElement('input');
const submitButton = document.querySelector('.submit-form');
hiddenInput.setAttribute('type', 'hidden');
hiddenInput.setAttribute('name', 'stripeToken');
hiddenInput.setAttribute('value', token.id);
form.appendChild(hiddenInput);

// form.submit();

//new AJAX code
const submitForm = (e) => {
    e.preventDefault();
    const request = new XMLHttpRequest();
    request.open('POST', e.target.action);
    if (e.target.status === 200) {
        console.info('successs:' + e.target.response)
    } else {
       console.info('fail')
    }
};
form.addEventListener('submit', submitForm);

ФОРМА

<form action = "<?= $page->url() ?>/charge" method = "POST" id = "payment-form">
   <input type = "text" name = "name" class = "StripeElement StripeElement--empty" placeholder = "First Name">
   <input type = "email" name = "email" class = "StripeElement StripeElement--empty" placeholder = "Email Address">
   <div id = "card-element">
      <!-- A Stripe Element will be inserted here. -->
   </div>
       <!-- Used to display Element errors. -->
   <div id = "card-errors" role = "alert"></div>
   <button class = "submit-form stripe-button">Pay <?= $symbol ?><?= $page->amount()->html() ?></button>
</form>

PHP

<?php
function stripeCheckout() {
  require_once('stripe-php/init.php');

  \Stripe\Stripe::setApiKey(sk_test_xX5xxxxxxxxxxx);

  $POST = filter_var_array($_POST, FILTER_SANITIZE_STRING);

  $name = $POST['name'];
  $email = $POST['email'];
  $token = $POST['stripeToken'];
  $currency = 'gbp';
  $amount = s::get('stripeAmount');
  $description = s::get('stripeDescription');

  $customer = \Stripe\Customer::create(array(
    'email' => $email,
    'source' => $token
  ));

  // Charge the user's card:
  $charge = \Stripe\Charge::create(array(
    "amount" => $amount,
    "currency" => $currency,
    "description" => $description,
    "customer" => $customer->id,
  ));

 // print_r($charge);

 $charge_json = $charge->__toJSON();
}

Маршрут (Маршрут встроен в CMS)

c::set('routes', array(
    array(
        'pattern' => 'products/(:any)/charge',
        'method' => 'POST',
        'action'  => function() {
            stripeCheckout();
        },
    )
));

== РЕДАКТИРОВАТЬ ==

Скриншот сетевых запросов

Stripe - Отправить форму с помощью AJAX

В чем ошибка, если не 200?

epascarello 02.04.2018 17:19

Ошибки нет, просто выполняется инструкция else. Похоже, для токена есть только почтовый запрос. Скриншот добавлю.

CalAlt 02.04.2018 17:22

Спасибо что нашли время ответить. Я добавил скриншот. Кажется, ничего, кроме запроса POST для токена.

CalAlt 02.04.2018 17:26

На самом деле вы не отправляете запрос. См. request.send ().

Patrick Q 02.04.2018 17:28

Возможный дубликат Отправить данные POST с помощью XMLHttpRequest

Patrick Q 02.04.2018 17:28

Очень признателен, что вы нашли время ответить, отсутствие .send() действительно было проблемой. Добавил строчку request.send(new FormData(e.target));

CalAlt 02.04.2018 17:41
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
597
0

Другие вопросы по теме