Почему я получаю сообщение об ошибке «документ не определен»? - PullRequest
0 голосов
/ 08 мая 2020

Я создаю форму, подобную приложению, в react native, где пользователи смогут вводить текст и нажимать кнопку, и тест, введенный пользователями, будет отправлен мне по электронной почте. Я использовал для этого электронную почту JS, и мой код находится ниже:

"use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var EmailJSResponseStatus_1 = require("./models/EmailJSResponseStatus");
    exports.EmailJSResponseStatus = EmailJSResponseStatus_1.EmailJSResponseStatus;
    var UI_1 = require("./services/ui/UI");
    var _userID = null;
    var _origin = 'https://api.emailjs.com';
    function sendPost(url, data, headers) {
        if (headers === void 0) { headers = {}; }
        return new Promise(function (resolve, reject) {
            var xhr = new XMLHttpRequest();
            xhr.addEventListener('load', function (event) {
                var responseStatus = new EmailJSResponseStatus_1.EmailJSResponseStatus(event.target);
                if (responseStatus.status === 200 || responseStatus.text === 'OK') {
                    resolve(responseStatus);
                }
                else {
                    reject(responseStatus);
                }
            });
            xhr.addEventListener('error', function (event) {
                reject(new EmailJSResponseStatus_1.EmailJSResponseStatus(event.target));
            });
            xhr.open('POST', url, true);
            for (var key in headers) {
                xhr.setRequestHeader(key, headers[key]);
            }
            xhr.send(data);
        });
    }
    function appendGoogleCaptcha(templatePrams) {
        var element = document.getElementById('g-recaptcha-response');
        if (element && element.value) {
            templatePrams['g-recaptcha-response'] = element.value;
        }
        element = null;
        return templatePrams;
    }
    /**
     * Initiation
     * @param {string} userID - set the EmailJS user ID
     * @param {string} origin - set the EmailJS origin
     */
    function init(userID, origin) {
        _userID = userID;
        _origin = origin || 'https://api.emailjs.com';
    }
    exports.init = init;
    /**
     * Send a template to the specific EmailJS service
     * @param {string} serviceID - the EmailJS service ID
     * @param {string} templateID - the EmailJS template ID
     * @param {Object} templatePrams - the template params, what will be set to the EmailJS template
     * @param {string} userID - the EmailJS user ID
     * @returns {Promise<EmailJSResponseStatus>}
     */
    function send(serviceID, templateID, templatePrams, userID) {
        var params = {
            lib_version: '2.4.1',
            user_id: userID || _userID,
            service_id: serviceID,
            template_id: templateID,
            template_params: appendGoogleCaptcha(templatePrams)
        };
        return sendPost(_origin + '/api/v1.0/email/send', JSON.stringify(params), {
            'Content-type': 'application/json'
        });
    }
    exports.send = send;
    /**
     * Send a form the specific EmailJS service
     * @param {string} serviceID - the EmailJS service ID
     * @param {string} templateID - the EmailJS template ID
     * @param {string | HTMLFormElement} form - the form element or selector
     * @param {string} userID - the EmailJS user ID
     * @returns {Promise<EmailJSResponseStatus>}
     */
    function sendForm(serviceID, templateID, form, userID) {
        if (typeof form === 'string') {
            form = document.querySelector(form);
        }
        if (!form || form.nodeName !== 'FORM') {
            throw 'Expected the HTML form element or the style selector of form';
        }
        UI_1.UI.progressState(form);
        var formData = new FormData(form);
        formData.append('lib_version', '2.4.1');
        formData.append('service_id', serviceID);
        formData.append('template_id', templateID);
        formData.append('user_id', userID || _userID);
        return sendPost(_origin + '/api/v1.0/email/send-form', formData)
            .then(function (response) {
            UI_1.UI.successState(form);
            return response;
        }, function (error) {
            UI_1.UI.errorState(form);
            return Promise.reject(error);
        });
    }
    exports.sendForm = sendForm;
    exports.default = {
        init: init,
        send: send,
        sendForm: sendForm
    };

Однако, когда я запустил это, получил сообщение об ошибке «документ не определен». Кроме того, я вызываю функцию email js .send () Функция send () определена в приведенном выше коде и говорит, что «документ не определен». Документ, на который они ссылаются, находится в функции appendGoogleCaptcha (), которая связана с отправкой электронной почты.

Моя теория заключается в том, что мне нужно определить свойство окна, чтобы оно знало, какой документ страницы в целом пытается найти. Я сделал window.onload = function () {}, но это заставляет все функции в этом случае говорить «Xyz не существует». Мы будем благодарны за любые отзывы

1 Ответ

2 голосов
/ 08 мая 2020

Здесь:

function appendGoogleCaptcha(templatePrams) {
    var element = document.getElementById('g-recaptcha-response');
    ...
}

А здесь:

function sendForm(serviceID, templateID, form, userID) {
    if (typeof form === 'string') {
        form = document.querySelector(form);
...
}

Вы не можете этого сделать, документ des не существует в react native. Вы можете заменить его ссылкой, но если этот код не предназначен для react-native, у вас, вероятно, возникнет больше проблем в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...