Я хочу использовать 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
.