Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 26.11.2021, 11:16
Интересующийся
Отправить личное сообщение для s868 Посмотреть профиль Найти все сообщения от s868
 
Регистрация: 18.11.2021
Сообщений: 15

Сообщение от ksa Посмотреть сообщение
Так ты как-то открываешь сокет... Потом отправляешь запрос... После получения ответа сокет закрываешь.
Так?
я думал, что сокет открывается при обращении к серверу, по крайней мере у меня оно так работает)
повторяю, я "создал" сервер программой hercules_3-2-8 и вижу что на него приходит.
приходит пакет с заголовком, потом я хочу сервером отправить ответ, но колбек в программе не срабатывает.
есть мнение, что после отправки пакета сокет закрывается.
потому и прошу показать фрагмент кода, который ПРАВИЛЬНО делает запрос и получает ответ.
Ответить с цитированием
  #12 (permalink)  
Старый 26.11.2021, 11:36
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 13,605

Сообщение от s868
я думал, что сокет открывается при обращении к серверу
Если ты получил ответ на клиенте - сервер про тебя уже знать не знает...

Сообщение от s868
потому и прошу показать фрагмент кода, который ПРАВИЛЬНО делает запрос и получает ответ.
Так в самой документации этих примеров достаточно...
Вот хоть такой
<!DOCTYPE html>
<html>
	<head>
		<title>Использование функции $.ajax()</title>
		<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
		<script>
	$( document ).ready(function(){
	  $( "button" ).click(function(){ // задаем функцию при нажатиии на элемент <button>
	    $.ajax({
	      method: "POST", // метод HTTP, используемый для запроса
	      url: "about.php", // строка, содержащая URL адрес, на который отправляется запрос
	      data: { // данные, которые будут отправлены на сервер
	        name: "Denis",
	        city: "Erebor"
	      },
	      success: [function ( msg ) { // функции обратного вызова, которые вызываются если AJAX запрос выполнится успешно (если несколько функций, то необходимо помещать их в массив)
	        $( "p" ).text( "User saved: " + msg ); // добавляем текстовую информацию и данные возвращенные с сервера
	      },
	      function () { // вызов второй функции из массива
	        console.log( "next function" );
	      }],
	      statusCode: {
	        200: function () { // выполнить функцию если код ответа HTTP 200
	          console.log( "Ok" );
	        }
	      }
	    })
	  });
	});
		</script>
	</head>
	<body>
		<button>Клик</button>
		<p></p>
	</body>
</html>
Ответить с цитированием
  #13 (permalink)  
Старый 26.11.2021, 12:15
Интересующийся
Отправить личное сообщение для s868 Посмотреть профиль Найти все сообщения от s868
 
Регистрация: 18.11.2021
Сообщений: 15

скопировал фрагмент кода в пустой файл, в урл установил google.com, убрал отправку данных, изменил колбек на window.alert("Hello world!");

запустил файл, нажал на кнопку.
(предварительно открыл консоль разработчика в браузере хром)
вижу,что запрос на гугл произошел, ответ получен

HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD
Date: Fri, 26 Nov 2021 09:20:22 GMT
Content-Type: text/html; charset=UTF-8
Server: gws
Content-Length: 1589
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN

колбек функция window.alert("Hello world!");
не сработала, данные на экране не появились.

что делаю неправильно?
Ответить с цитированием
  #14 (permalink)  
Старый 26.11.2021, 12:16
Интересующийся
Отправить личное сообщение для s868 Посмотреть профиль Найти все сообщения от s868
 
Регистрация: 18.11.2021
Сообщений: 15

где эти Content-Length: 1589???
они же пришли от гугла
Ответить с цитированием
  #15 (permalink)  
Старый 26.11.2021, 12:45
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 1,573

Сообщение от s868
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD
Вот на это внимание надо обращать.

Ну и к тому же не каждый сервер позволит обращаться к себе скриптам.
Та в заголовках надо устанавливать правильны user-agent + проблемы cors...

Последний раз редактировалось voraa, 26.11.2021 в 12:48.
Ответить с цитированием
  #16 (permalink)  
Старый 26.11.2021, 13:12
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 1,573

Вообще обращаться к серверу на другом домене (другой ip, другой порт, другой протокол) через $.ajax или fetch - тот еще геморой.
К тому же вы, похоже, просто вызываете страницу с диска, а не получаете с какого то сервера. (там где то в заголовке Origin: null был) Этот фокус вообще не пройдет.
Что бы страница (она должна быть получена не из файла, а с какого то сервера) хочет получить данные с другого сервера, через $.ajax или fetch, то тот другой сервер должен посылать в ответ правильные заголовки, связанные с cors. Иначе браузер просто не пропустит его ответы. Но и вы должны правильно настроить заголовки в запросе.
Ответить с цитированием
  #17 (permalink)  
Старый 26.11.2021, 13:25
Интересующийся
Отправить личное сообщение для s868 Посмотреть профиль Найти все сообщения от s868
 
Регистрация: 18.11.2021
Сообщений: 15

эхх((
именно страница (нтмл-файл) находится на диске.
если ее разместить на каком-то хостинге - проблема решится?
Ответить с цитированием
  #18 (permalink)  
Старый 26.11.2021, 13:52
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 1,573

Смотря какая проблема.
(Проще у себя на компе поднять сервер - хоть апач, хоть иис)
Но не всякая проблема решится.
Что бы браузер пропустил ответ от стороннего сервера на запрос от $.ajax или fetch, этот сервер должен присылать соответствующие заголовки. Например
strict-origin-when-cross-origin

google.com такого заголовка не посылает - поэтому браузер блокирует ответ.(Ответ то приходит, но браузер его не дает посмотреть.)

Я уже писал, что это геморой обращаться к произвольному серверу из скриптов в браузере.

Проще делать так - писать на своем сервере скрипт, который будет обращаться к другим серверам и пересылать ответ уже странице. Серверные скрипты все эти проблемы с cors не волнуют. Это чисто браузерная заморочка.
Ответить с цитированием
  #19 (permalink)  
Старый 26.11.2021, 13:59
Интересующийся
Отправить личное сообщение для s868 Посмотреть профиль Найти все сообщения от s868
 
Регистрация: 18.11.2021
Сообщений: 15

сервер, ответ от которого не воспринимается, сделан на микроконтроллере, влеплю любой заголовок, в данный момент шлет

"HTTP/1.1 200 OK\r\n";
"Content-Type: text/html; charset=UTF-8\r\n";
"Content-Length: 800\r\n\r\n";
....................................


что надо добавить в заголовок, чтоб ответ был воспринят js?
Ответить с цитированием
  #20 (permalink)  
Старый 26.11.2021, 15:07
Интересующийся
Отправить личное сообщение для s868 Посмотреть профиль Найти все сообщения от s868
 
Регистрация: 18.11.2021
Сообщений: 15

все, спасибо, разобрался:
char htmld0[]="HTTP/1.1 200 OK\r\n";
char htmld1[]="Content-Type: text/html; charset=UTF-8\r\n";
char htmld2[]="Access-Control-Allow-Origin: *\r\n";
char htmld3[]="Content-Length: 12\r\n\r\n";
char htmld4[]= "123456789abc";

колбэк вызывается, принятые данные 123456789abc
всем спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обмен сообщениями через chrome API Nikolay37 Events/DOM/Window 3 20.09.2017 14:21
Обмен данными с windows приложением webgame Оффтопик 4 02.02.2016 03:42
кроссдоменный обмен через анонимайзер + фрейм Deff Ваши сайты и скрипты 5 13.01.2013 22:24
Обмен значений переменных через фреймы kodoo Events/DOM/Window 8 04.11.2012 23:04
Кросдоменный обмен данными buhuru Общие вопросы Javascript 4 22.08.2008 10:53