Джанго |Чистый Javascript - Ни одно приложение не работает с Django - PullRequest
0 голосов
/ 08 ноября 2019

Я хочу использовать ajax в чистом javascript (или в библиотеке, которая не использует jQuery), но что бы я ни использовал application/type, Django не обрабатывает данные. (Я хочу отправлять тексты, объекты, массивы и т. Д.)

Вот мой код Javascript с использованием библиотеки "Ajax" : function objectToFormData (obj, rootName, ignoreList) {

    var formData = new FormData();

    function appendFormData(data, root) {
        if (!ignore(root)) {
            root = root || '';
            if (data instanceof File) {
                formData[root] = data;
            } else if (Array.isArray(data)) {
                for (let i = 0; i < data.length; i++) {
                    appendFormData(data[i], root + '[' + i + ']');
                }
            } else if (typeof data === 'object' && data) {
                for (const key in data) {
                    if (data.hasOwnProperty(key)) {
                        if (root === '') {
                            appendFormData(data[key], key);
                        } else {
                            appendFormData(data[key], root + '.' + key);
                        }
                    }
                }
            } else {
                if (data !== null && typeof data !== 'undefined') {
                    formData[root] = data;
                }
            }
        }
    }

    function ignore(root){
        return Array.isArray(ignoreList)
            && ignoreList.some(function(x) { return x === root; });
    }

    appendFormData(obj, rootName);

    return formData;
}

class Ajax{
    static _default_send(url, data, success, error=null, method="post", headers={}){
        if ("csrfmiddlewaretoken" in data){
            headers["x-csrftoken"] = data["csrfmiddlewaretoken"];
            delete data["csrfmiddlewaretoken"];
        }

        const form_data = objectToFormData(data);

        headers["content-type"] ="application/form-data";
        headers["accept"] = "application/json";
        headers["x-requested-with"] = "XMLHttpRequest";

        ajax({
            url: url,
            data: form_data,
            method: method,
            headers: headers,
        })
            .then(success)
            .catch((err, xhrObject) => {
                if (error !== null){
                    error(err, xhrObject);
                } else {

                    if (err.suggest_reload === true){
                        TinyText.Create(err.essage, {
                            action: {
                                text: "Seite neu laden",
                                func: () => {
                                    window.location.reload();
                                }
                            }
                        });
                    } else {
                        TinyText.Create(err.message);
                    }
                }
            });
    }

    static Post(url, data, success, error=null){
        Ajax._default_send(url, data, success, error, "post");
    }

    static Put(url, data, success, error=null){
        Ajax._default_send(url, data, success, error, "put");
    }

    static Delete(url, data, success, error=null){
        Ajax._default_send(url, data, success, error, "delete");
    }

    static Get(url, data, success, error=null){
        Ajax._default_send(url, data, success, error, "get");
    }

}

Когда я пытаюсь использовать request.POST в представлении Django, он возвращает пустой QueryDict(). Я также попробовал x-www-form-urlencoded, и он работал нормально, но я не могу пересылать массивы или объекты поверх него, поэтому я пытаюсь переключить application/type.

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