Получение ошибки 400 ошибок в JQuery AJAX POST
Я пытаюсь отправить запрос AJAX POST с помощью JQuery, но у меня 400 ошибок запроса.
Вот мой код:
$.ajax({
type: 'POST',
url: "http://localhost:8080/project/server/rest/subjects",
data: {
"subject:title":"Test Name",
"subject:description":"Creating test subject to check POST method API",
"sub:tags": ["facebook:work", "facebook:likes"],
"sampleSize" : 10,
"values": ["science", "machine-learning"]
},
error: function(e) {
console.log(e);
}
});
Он говорит: невозможно создать ресурс из запроса.
Что мне не хватает?
Ответы
Ответ 1
Наконец, я получил ошибку, и причина в том, что мне нужно подкрепить данные JSON, которые я отправлял. Я должен установить тип контента и тип данных в объекте XHR.
Итак, правильная версия здесь:
$.ajax({
type: 'POST',
url: "http://localhost:8080/project/server/rest/subjects",
data: JSON.stringify({
"subject:title":"Test Name",
"subject:description":"Creating test subject to check POST method API",
"sub:tags": ["facebook:work", "facebook:likes"],
"sampleSize" : 10,
"values": ["science", "machine-learning"]
}),
error: function(e) {
console.log(e);
},
dataType: "json",
contentType: "application/json"
});
Может быть, это поможет кому-то другому.
Ответ 2
Вопрос немного старый... но на всякий случай кто-то сталкивается с ошибкой 400, это также может быть связано с необходимостью отправлять сообщение csrfToken в качестве параметра для запроса на отправку.
Вы должны получить имя и значение от ремесла в своем шаблоне:
<script type="text/javascript">
window.csrfTokenName = "{{ craft.config.csrfTokenName|e('js') }}";
window.csrfTokenValue = "{{ craft.request.csrfToken|e('js') }}";
</script>
и передать их в ваш запрос
data: window.csrfTokenName+"="+window.csrfTokenValue
Ответ 3
Вам нужно построить запрос из объекта "data", используя следующую функцию
function buildQuery(obj) {
var Result= '';
if(typeof(obj)== 'object') {
jQuery.each(obj, function(key, value) {
Result+= (Result) ? '&' : '';
if(typeof(value)== 'object' && value.length) {
for(var i=0; i<value.length; i++) {
Result+= [key+'[]', encodeURIComponent(value[i])].join('=');
}
} else {
Result+= [key, encodeURIComponent(value)].join('=');
}
});
}
return Result;
}
а затем выполните
var data= {
"subject:title":"Test Name",
"subject:description":"Creating test subject to check POST method API",
"sub:tags": ["facebook:work, facebook:likes"],
"sampleSize" : 10,
"values": ["science", "machine-learning"]
}
$.ajax({
type: 'POST',
url: "http://localhost:8080/project/server/rest/subjects",
data: buildQuery(data),
error: function(e) {
console.log(e);
}
});