Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 18.01.2021
Сообщений: 2
1

json запрос с сервера на localhost

18.01.2021, 22:52. Просмотров 1079. Ответов 3
Метки нет (Все метки)

Здравствуйте. Столкнулся с проблемой отправки json запроса с сайта с программой на кассовый аппарат, подключенный к компьютеру. Сразу оговорюсь; при отправки запросов в php curl все работает, но только при условии, что php выполняется на локальном компьютере, а необходимо чтобы программа была на сервере в интернете. Насколько я понимаю, это можно сделать средствами ajax. Вопрос как сделать например запрос {"command": "GetDriverInfo"} на localhost в ответ я должен получить информацию о драйвере. Пример рабочего варианта в php curl
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
$data = array("command" => "GetDriverInfo");    
$url = 'http://localhost:50010/api.json';
$postdata = json_encode($data);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
//curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8'));
$result = curl_exec($ch);
curl_close($ch);
print_r ($result);
?>
В ответ получаю: {"result":0,"driverVer":"1.9.0.580","protocolVer":"3.3","dri verBaseVer":"0.2"}
Пробовал так:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
    $.ajax({
        type: "POST",
        url: "http://localhost:50010/api.json",
        data: {command: "GetDriverInfo"},
        dataType: "json",
         contentType: 'application/json; charset=UTF-8',
        success: function(data) {
            console.log(data);
            alert('Данные с кассы - '+JSON.stringify(data));
        }
    })
    </script>
?>
но результат не получаю даже на локальном компьютере.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.01.2021, 22:52
Ответы с готовыми решениями:

Отправить POST запрос и получить json данные с сервера. Как сделать?
Добрый день. Мне нужно создать html форму с двумя полями username и password, методом POST...

Вернуть JSON с localhost
как вернуть json из http://localhost:8080/car...

Установка mysql сервера на localhost
Нужен sql-сервер на комп (windows 7, 64 бит), дальше будет собираться плагин qt и всё это должно...

Перенос с удаленного сервера на localhost
Здравствуйте.Возникла необходимость перенести сайт на localhost(пользуюсь денвером).Перенес...

3
Эксперт JS
5122 / 2940 / 1385
Регистрация: 14.06.2018
Сообщений: 5,611
21.01.2021, 08:23 2
Здравствуйте.
Вы перепутали отправку на сервер JSON с получением от сервера JSON.

Также в URL при отправке AJAX не надо указывать localhost. Страница сама знает структуру своего сайта.
Например, /api.json означает, что в корне сайта url.pathname равно api.json
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
</head>
<body>
    <script>
        $.ajax({
            url: "/api.json", // В корне сайта. localhost указывать нельзя
            method: "POST",
            // contentType (default: 'application/x-www-form-urlencoded; charset=UTF-8')
            data: { command: "GetDriverInfo" }, // по умолчанию в формате application/x-www-form-urlencoded
            dataType: "json", // тип данных, который вы ожидаете получить от сервера
            success(response) {
                console.log(response.driverVer);
            },
            error(xhr) {
                console.log(`${xhr.status}: ${xhr.statusText}`);
            }
        });
    </script>
</body>
</html>
Отправляет на сервер заголовок запроса :
application/x-www-form-urlencoded; charset=UTF-8
и тело запроса:
command=GetDriverInfo
Получение стандартного POST-запроса в PHP:
PHP
1
$postdata = $_POST["command"];
А если мы хотим отправить команду на сервер в виде JSON, то:
PHP/HTML
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
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
</head>
<body>
 
    <script>
        $.ajax({
            url: "/api.json", // В корне сайта. localhost указывать нельзя
            method: "POST",
            contentType: "application/json; charset=UTF-8", // тип данных, отправляемых на сервер
            // Отправка строки автоматически отключает принудительное 
            // преобразование в x-www-form-urlencoded
            data: JSON.stringify({ command: "GetDriverInfo" }), // в формате application/json
            dataType: "json", // тип данных, который вы ожидаете получить от сервера
            success(response) {
                console.log(response.driverVer);
            },
            error(xhr) {
                console.log(`${xhr.status}: ${xhr.statusText}`);
            }
        });
    </script>
</body>
</html>
Отправляет на сервер заголовок запроса :
application/json; charset=UTF-8
и тело запроса:
{"command":"GetDriverInfo"}
Получаем сырую строку в PHP:
PHP
1
$postData = file_get_contents('php://input');
Если потом нужно декодировать в объект: $d = json_decode($postData, true);
1
0 / 0 / 0
Регистрация: 18.01.2021
Сообщений: 2
21.01.2021, 21:35  [ТС] 3
amr-now Спасибо, понял что не так делал. Остался один вопрос: почему-то при выполнении запроса он не работает ни в одном из браузеров кроме хрома, запущенного с параметрами "chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security" Я думаю здесь ключевой параметр "disable-web-security". Хром в стандартном режиме выдает в консоли "POST http://127.0.0.1:50010/api.json net::ERR_EMPTY_RESPONSE" Мозилла выдает "Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на http://127.0.0.1:50010/api.json. (Причина: не удалось выполнить запрос CORS)."
0
Эксперт JS
5122 / 2940 / 1385
Регистрация: 14.06.2018
Сообщений: 5,611
22.01.2021, 04:57 4
Цитата Сообщение от evbazanov Посмотреть сообщение
почему-то при выполнении запроса он не работает ни в одном из браузеров кроме хрома, запущенного с параметрами "chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security"
Потому что эта страница с данным JS-скриптом должна быть частью сайта.

Допустим, на сайте два файла:
page.html - эта страница
data.json - файл с данными. page.html загружает его аяксом.
Сервер должен быть запущен.
Тогда в браузере в адресной строке набираем:
localhost:порт, на котором запущен сервер/page.html

И тогда страница, запущенная непосредственно из сервера, нормально отработает.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.01.2021, 04:57

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Редирект со страницы сайта на localhost сервера
Всем привет. В общем, у меня есть дашборд (Grafana), который запущен на localhost:3000. Еще есть...

OpenVPN и доступ к порту сервера на localhost
Всем привет. Впервые пытаюсь настроить OpenVPN. Успешно поднял сервер и подключился к нему...

Post json и не только json запрос по нажатию кнопки
код кнопки: private void materialRaisedButton1_Click(object sender, EventArgs e) ...

Разместил файлы Angular-2 на хостинге не работает http://localhost (json server)
Всем привет! Разместил проект по Angular 2 на сайте. Репозиторий проекта на GitHub:...

Localhost в wordpress, какой реальный адрес сервера?
В wp-config.php указан DB_HOST как localhost. Также пароль, имя пользователя и прочее. А к какому...

Запрос на localhost
Здравствуйте. Подскажите можно ли сделать следующее: после открытия страницы с удаленного сервера...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.