Подтвердить что ты не робот

Получение ошибки 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);
  }
});

Он говорит: невозможно создать ресурс из запроса. Что мне не хватает?

4b9b3361

Ответ 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);
  }
});