Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/40: Рейтинг темы: голосов - 40, средняя оценка - 4.88
6 / 6 / 7
Регистрация: 16.05.2013
Сообщений: 351

Написание PUT и DELETE запросов AJAX

31.07.2017, 10:00. Показов 7396. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Пытаюсь написать PUT и DELETE запросы с помощью AJAX, но получаю следующие ошибки от обоих:
PUT http://localhost:8080/crud/srv 500 (Internal Server Error)
DELETE http://localhost:8080/crud/srv 500 (Internal Server Error)

Как шлю PUT запрос:
JavaScript
1
2
3
4
5
6
7
function updateP(id,fname,lname,age) {
    var req = 'id=' + id + '&fname=' + fname + '&lname=' + lname + '&age=' + age;
    http.open('PUT', '/crud/srv', true);
    http.setRequestHeader("Content-type", "text-plain");
    http.onreadystatechange = updateReply;
    http.send(req);
}
Как шлю DELETE запрос:
JavaScript
1
2
3
4
5
6
7
function deleteP(id) {
    var req = 'id=' + id;
    http.open('DELETE', '/crud/srv', true);
    http.setRequestHeader("Content-type", "text-plain");
    http.onreadystatechange = deleteReply;
    http.send(req);
}
Подскажите, пожалуйста, правильно ли я составляю запросы? И в чем могут быть вообще тут трудности и на что обратить внимание?

Заранее благодарю за любые комментарии!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.07.2017, 10:00
Ответы с готовыми решениями:

Можно ли использовать PUT и DELETE запрос без ajax
с GET ($.get) и POST ($.post) все понятно. а можно ли PUT и DELETE тем же способом? Если сделать так: function doPut() ...

Правильное написание своих Ajax-запросов в Joomla 2.5
Приветствую всех. Не первый день работаю с джумлой и не могу научится правльно писать свои Ajax запросы У меня в шаблоне джумлы есть...

XMLHttpRequest RESTful (GET, POST, PUT, DELETE)
Всем доброго времени суток. Есть образец функционала XMLHttpRequest https://gist.github.com/EtienneR/2f3ab345df502bd3d13e Когда его...

7
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
31.07.2017, 11:06
500-я ошибка говорит об ошибке со стороны сервера. Нужен ваш php-скрипт, на который вы отправляете запрос.
0
6 / 6 / 7
Регистрация: 16.05.2013
Сообщений: 351
31.07.2017, 12:35  [ТС]
У меня обработка идет не в php, а в .class servlet =) И хоть там были методы обработки doPut и doDelete - всё равно не отрабатывало и давало 500-ю.

Я вышел из положения так: оставил GET для чтения таблицы базы, а в POST сделал switch, который в зависимости от параметра method выполнял у меня create, update или delete операцию.

Кстати, не подскажете ли почему у меня перестал работать delete?
Получаю такое: Failed to load resource: the server responded with a status of 500 (Internal Server Error)
А затем: POST http://localhost:8080/crud/srv 500 (Internal Server Error)

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function deleteP(id) {
    var req = 'id=' + id + '&method=delete';
    http.open('POST', '/crud/srv', true);
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http.onreadystatechange = actionReply;
    http.send(req); // подчеркивает тут
}
 
function actionReply() {
    if (http.readyState == 4) {
        if (http.status == 200) {
            var response = http.responseText;
 
            if(response == 'Success') {
                readP();
            } else {
                alert('Action overed with error: ' + response);
            }
        }
    }
}
Класс с сервлетом (тот самый srv):
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public class Server extends HttpServlet
{
    private PersonDAO_MySQL pd = new PersonDAO_MySQL();
 
    // CREATE UPDATE DELETE
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException
    {
        PrintWriter pw = resp.getWriter();
        if (isset(req.getParameter("method")))
        {
            if (isset(req.getParameter("id")) && isset(req.getParameter("fname")) &&
                    isset(req.getParameter("lname")) && isset(req.getParameter("age")))
            {
                int id = Integer.parseInt( req.getParameter("id") );
                String fname = req.getParameter("fname");
                String lname = req.getParameter("lname");
                int age = Integer.parseInt( req.getParameter("age") );
                String method = req.getParameter("method");
 
                Person p = new Person(id, fname, lname, age);
                
                switch(method)
                {
                    case "create": pd.create(p); break;
                    case "update": pd.update(p); break;
                    case "delete": pd.delete(p); break;
                    default: pw.print("Unhandable method.");
                }
                
 
                pw.print("Success");
            }
            else
                pw.print("One or more params are not set.");
        }
        else
            pw.print("Method is not set.");
    }
 
    //OPTIONAL
    private boolean isset(String arg)
    {       
        if (arg.equals("null"))
            return false;
 
        return true;
    }
}
P.S. методы PersonDAO_MySQL работают 100%
0
 Аватар для KPOT_KZ
10 / 10 / 1
Регистрация: 08.06.2011
Сообщений: 98
31.07.2017, 12:38
Посмотрите пожалуйста логи вашего запроса и получите развернутый ответ, почему так получилось.
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
31.07.2017, 12:40
Откуда вы взяли функцию isset()?
Цитата Сообщение от SnapeEye Посмотреть сообщение
Java
1
if (isset(req.getParameter("method"))
0
6 / 6 / 7
Регистрация: 16.05.2013
Сообщений: 351
31.07.2017, 13:23  [ТС]
В коде же написан был отдельно:
Java
1
2
3
4
5
6
7
8
//OPTIONAL
    private boolean isset(String arg)
    {       
        if (arg.equals("null"))
            return false;
 
        return true;
    }
Добавлено через 13 минут
Цитата Сообщение от KPOT_KZ Посмотреть сообщение
Посмотрите пожалуйста логи вашего запроса и получите развернутый ответ, почему так получилось.
Посмотрел логи. Ошибка java.lang.NullPointerException на строке из isset():
Java
1
if (arg.equals("null"))
Интересно, как arg может быть null, если в случае отсутствия параметра возвращается строка "null"...

Добавлено через 8 минут
Нашел в чем проблема -_- соединил обработку методов и забыл передавать параметры в delete -_- Спасибо за наводки!
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
31.07.2017, 13:54
Не пролистал до конца листинг...
Цитата Сообщение от SnapeEye Посмотреть сообщение
Интересно, как arg может быть null, если в случае отсутствия параметра возвращается строка "null"
А вот доки говорят другое:
Returns the value of a request parameter as a String, or null if the parameter does not exist.
Отсюда и возникает ошибка NullPointerException.
Java
1
2
3
    private boolean isset(String arg) {       
        return arg != null;
    }
1
6 / 6 / 7
Регистрация: 16.05.2013
Сообщений: 351
31.07.2017, 15:50  [ТС]
Уже исправил, но всё равно спасибо за информацию!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.07.2017, 15:50
Помогаю со студенческими работами здесь

ASP.NET Core Web API - не приходят данные [FromBody] Post/Put запросов
Всем привет! Столкнулся в ASP.NET Core Web API с ситуацией, когда в Action не приходят данные запроса (со строки все нормально). ...

Переопределение запросов TableAdapter-a. Запросы UPDATE и DELETE
Изначально не удавалось отредактировать базу. На форумах нашёл, что неободимо посмотреть свойства TableAdaptera. Посмотрел - и...

Написание запросов
Здравствуйте! Помогите пожалуйста написать запросы... Очень нужно... Заранее очень благодарен! Нужен 3 и 4 запросы, с первыми двумя...

Написание запросов
Доброго времени суток! Уважаемые знатоки, помогите пожалуйста написать данные запросы SQL. Базу данных "Торговля"...

SQL-запросы INSERT UPDATE DELETE через мастер или конструктор запросов
До сих пор не понимаю, в Access есть мастер и конструктор запросов. Сделаны для облегчения написания SQL.Но можно ли и как применить их к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru