Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Post запрос связанный с базой данных (https://javascript.ru/forum/misc/75826-post-zapros-svyazannyjj-s-bazojj-dannykh.html)

МарияКоми 09.11.2018 19:09

Post запрос связанный с базой данных
 
Здравствуйте, вообще ничего не понимаю в javascript, не могли бы вы указать, где ошибка в моем коде, пишет 500 internal server error
<html>
<body onload="loadorder()">
    <input placeholder="Name" id="N" type=text size="20">
    <input placeholder="Description" id="D" type=textarea size="60">

    <select id="1">
       
    </select>
    
    <button onclick="post()">Записать</button>
    
</body>
</html>
<script>
    

    function loadorder()
    {
        var xmlhttp = new XMLHttpRequest();

        xmlhttp.onreadystatechange = function () {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                openJSON(xmlhttp.responseText);
            }
        }
        xmlhttp.open("GET", 'https://apex.oracle.com/pls/apex/mariakom/zoo/order_a', true);
        xmlhttp.send();
    }

    function openJSON(response)
    {
        var dv=document.getElementById("1")
        var arr = JSON.parse(response);
        for (i = 0; i < arr.items.length; i++) 
        {
            var el = document.createElement('option');
            el.innerHTML = arr.items[i].id+ ". "+arr.items[i].name;
            dv.appendChild(el);
        }
    }

    function post()
    {
        var ord=document.getElementById("1").id;
        var n=document.getElementById("N");
        var desc=document.getElementById("D");
        var xhr = new XMLHttpRequest();
        var url = "https://apex.oracle.com/pls/apex/mariakom/zoo/family";
        xhr.open("POST", url, true);
        xhr.setRequestHeader("Content-Type", "application/json");
        xhr.onreadystatechange = function () 
        {
        if (xhr.readyState === 4 && xhr.status === 200) {
            var json = JSON.parse(xhr.responseText);
            console.log(json.name + ", " + json.description);
            
            }
        };
        var data = JSON.stringify({"name": n, "description": desc,"order_a_id": ord});
        xhr.send(data);
    }
    
</script>

рони 09.11.2018 19:16

МарияКоми,
код на сервере проверяли?

МарияКоми 09.11.2018 19:26

А как это сделать? Я правда ничего не понимаю в этом, так что сразу извиняюсь за глупый вопрос

рони 09.11.2018 20:00

МарияКоми,
подожите специалистов по серверам.

laimas 10.11.2018 04:31

var ord=document.getElementById("1").id; - это как понимать, зная ID элемента, запрашивать его? С таким же успехом можно написать сразу - var ord = 1;

Вы используете API чужого сервера, значит нужно внимательно читать их документацию. Эти два GET запроса отработают без проблем:

https://apex.oracle.com/pls/apex/mariakom/zoo/order_a
https://apex.oracle.com/pls/apex/mariakom/zoo/family

Причем второй и без параметров возвращает json. А вот попытка по второму URL обратиться методом POST завершается неудачей - статус 500.

МарияКоми 10.11.2018 11:49

Я первый раз работаю с javascript не могли бы вы тогда пояснить как мне из выбранного select получить одно из двух значений? Там прописывается как бы id order'а и name его же
Задача сие метода заключается же чтобы он по нажатию на кнопку методом post записывал введенные данные с экрана в таблицу, я так понимаю, что делаю это неправильно, не могли бы вы точнее пояснить в че ошибка, пожалуйста?

laimas 10.11.2018 12:04

Цитата:

Сообщение от МарияКоми
Я первый раз работаю с javascript не могли бы вы тогда пояснить как мне из выбранного select получить одно из двух значений?

Вы думаете я знаю чего вам надо получить? :)

Чисто из теории. Допустим у вас есть один список и вам нужно получить значение какого-то его атрибута, тогда да:

var id = document.querySelector('select').id


А вы ведь зная ID, оперируете им явно и в то же время хотите его получить. Понятно же и без пояснений, что это глупость. Если же нужно получить "одно из двух значений", то значений чего, выбранной опции списка? Ну так значение value самого списка и будет значением выбранной его опции, то есть

var ord = document.getElementById("id списка, и не увлекайтесь цифрами").value;


Что такое "методом post записывал введенные данные с экрана в таблицу" я не знаю, но если речь идет о записи в базу по URL представленному, то я же вроде бы как написал, что данное API не принимает POST запросы, а только GET. Вы используете сервис Oracle, значит вы не можете вытворять что вам хочется, а работать только теми методами, что описаны в API сервиса. Читайте документацию, я ее не читал, не знаю, что там можно, чего нет я не знаю.

МарияКоми 10.11.2018 12:20

Большое спасибо, вопрос решен и все работает:)


Часовой пояс GMT +3, время: 03:39.