Получение 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);
}
});
Он говорит: не может построить ресурс из запроса. Что я упускаю ?
4 ответов
наконец, я получил ошибку, и причина заключалась в том, что мне нужно было stringify данные 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"
});
может быть это поможет кому-то еще.
вопрос немного старая... но на случай, если кто-то столкнется с ошибкой 400, это также может произойти из-за необходимости опубликовать csrfToken в качестве параметра запроса post.
вы должны получить имя и значение из корабля в вашем шаблоне :
<script type="text/javascript">
window.csrfTokenName = "{{ craft.config.csrfTokenName|e('js') }}";
window.csrfTokenValue = "{{ craft.request.csrfToken|e('js') }}";
</script>
и передайте их в вашем запросе
data: window.csrfTokenName+"="+window.csrfTokenValue
вам нужно построить запрос из объекта "данные", используя следующую функцию
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);
}
});
да. Вам нужно stringify
на JSON
данные orlse 400 bad request
ошибка возникает, поскольку она не может идентифицировать данные.
400 Bad Request
Неверный Запрос. Ваш браузер послал запрос, что этот сервер не мог понимать.
плюс вам нужно добавить content type
и datatype
как хорошо. Если нет, вы столкнетесь 415
ошибки, которая говорит Unsupported Media Type
.
415 Неподдерживаемый Тип Медиа
попробуйте это.
var newData = {
"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"]
};
var dataJson = JSON.stringify(newData);
$.ajax({
type: 'POST',
url: "http://localhost:8080/project/server/rest/subjects",
data: dataJson,
error: function(e) {
console.log(e);
},
dataType: "json",
contentType: "application/json"
});
таким образом, вы можете легко изменить необходимые вам данные. Это не будет путать вас, как это определено вне блока ajax.