Не получается отправить post запрос json

295
01 марта 2017, 21:24
function upload() {
    var form = document.getElementById( "load" );
    var obj = {"name":"",
        "runtimeAttributes":{
            "language":"",
            "code":""
        }};
    var elements = form.querySelectorAll( "input, select" );
    obj.name = elements[0].value;
    r = obj.runtimeAttributes;
    r.language = elements[1].value;
    file = document.getElementById("code").files[0];
    var reader = new FileReader();
    reader.onloadend = function(event) {
        var content = event.target.result;
        r.code = content
        var json = JSON.stringify( obj, null, '  ');
        output.innerHTML = json;
        var xhr = new XMLHttpRequest();
        xhr.open(form.method, form.action, true);
        xhr.setRequestHeader('Content-Type','application/json');
        xhr.send(json);
    };
    reader.readAsText(file);
}
<form id = "load" method="post" action="http://localhost:8080/lambdas" onsubmit="javascript:upload()" enctype="application/json">
            <input type="text" name="name" value="helloworld">
            <select name="language">
                <option>Python3</option>
            </select>
            <input type="file" name="code" id = "code">
            <input type="submit" value="send">
    </form>
{"message":"org.springframework.web.HttpMediaTypeNotSupportedException Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported"}
Answer 1

В приведённом вами коде нет ошибок, вот рабочий пример:

var xhr = new XMLHttpRequest(); 
xhr.open('POST', 'http://httpbin.org/post', true); 
xhr.setRequestHeader("Content-Type", "application/json"); 
 
xhr.onreadystatechange = function() { 
  if (xhr.readyState != 4) return; 
  if (xhr.status != 200) { 
    console.log(xhr.status + ': ' + xhr.statusText); 
  } else { 
    console.log(xhr.responseText); 
  } 
} 
 
xhr.send(JSON.stringify({param: 'value'}));

Как видим, сервер обработал запрос корректно, и в заголовках присутствует корректный Content-Type.

Судя по всему? у вас на сервер уходит другой заголовок Content-Type, либо их несколько, ищите в коде.

Можно посмотреть актуальные заголовки запроса в DevTools: F12 - вкладка Network(Сеть)

Answer 2

Должно 100% работать.

var xhr = new XMLHttpRequest();
xhr.open('POST', '/url', true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.send({some: 'some'});
READ ALSO
Переключение цветов блока по клику

Переключение цветов блока по клику

В общем, есть 6 блоков, при клике на блок, он должен стать синим, вот мой скрипт

279
Закрытие всплывающего окна js

Закрытие всплывающего окна js

Всем приветПодскажите пожалуйста способы закрытия модального окна по клику на кнопку? У меня есть скрипт, который именно это и делает, но после...

520
Вызов атрибута data

Вызов атрибута data

Не могу разобраться, как вызвать атрибут data, есть шаблон на bootstrap, есть Notifications, вызывается он с помощью кнопки

252