Перейти к содержанию
    

Привет!, во вложении пример страницы с JSON. Я конечно новичок в этом, может сделал не правильно или не оптимально... но работает...

 

//Если есть данные
	if (len_data)...
      
//Если строка "GET /", то значит это запрос HTTP
	if (strncmp((char*)tcp_pkt->data,"GET /", 5) == 0)...
      
if(strstr((char*)tcp_pkt->data,"rd175phy"))
    {
      char buf[50] = {0};
      char test[5] = {0};
      
      char *pos = strstr((char*)tcp_pkt->data,"rd175phy");
      test[0] = *(pos+9);
      if(*(pos+10)!=' ') test[1] = *(pos+10);
      char phy_addr = atoi(test);
      ...
        

 

index.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть уйма библиотек, парсящих JSON. Зачем велосипеды строить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

03.04.2022 в 21:50, Сёха сказал:

Привет!, во вложении пример страницы с JSON. Я конечно новичок в этом, может сделал не правильно или не оптимально... но работает...

 


//Если есть данные
	if (len_data)...
      
//Если строка "GET /", то значит это запрос HTTP
	if (strncmp((char*)tcp_pkt->data,"GET /", 5) == 0)...
      
if(strstr((char*)tcp_pkt->data,"rd175phy"))
    {
      char buf[50] = {0};
      char test[5] = {0};
      
      char *pos = strstr((char*)tcp_pkt->data,"rd175phy");
      test[0] = *(pos+9);
      if(*(pos+10)!=' ') test[1] = *(pos+10);
      char phy_addr = atoi(test);
      ...
        

 

index.html 4 kB · 2 скачивания

Добрый день. 

Я так понял ответ сервера  у вас написан без применения страндартных функций. Я использовал в своем проекте exemple  из MX Cube.  

void outputButtonState (struct netconn *conn ) // 
{
    portCHAR PAGE_BODY [100];
    char *prt= "Button status WEB SITE\r\n";
    char *prtbutton="Button status DISCOVERY \r\n";
    sprintf ( (char*)PAGE_BODY ,"%s%s%s%s", prt, prtled_Pagestatus, prtbutton, prtled_buttonPlatastatus);
    netconn_write(conn, PAGE_BODY, strlen((char*)PAGE_BODY), NETCONN_COPY);
}

а на стороне браузера обработка запроса осуществляется с помощью JS

   function Timer1() { // функция для запроса данных
      xhr.open("GET", "content.html?r=" + Math.random(), true); //Math.random() - защита от кеширования
      xhr.responseType = "text";
      xhr.onload = function(oEvent) {
        document.getElementById('information').innerHTML = xhr.response;
      }
      xhr.send(null);
      idTimer1 = setTimeout("Timer1()", 1000);
    }

а в вашем примере я так понял происходит передача данных с сервера в в переменную и затем парситься 

 

а в вашем примере я так понял происходит передача данных с сервера в в переменную 

var jsonResponse = JSON.parse(data);
 

и затем парситься 

                        document.getElementById('supply').innerHTML = jsonResponse["supply"];
                       
                        document.getElementById('poe1sts').innerHTML = jsonResponse["poe1sts"];
                        document.getElementById('poe1pdc').innerHTML = jsonResponse["poe1pdc"];
                        document.getElementById('poe1pt').innerHTML = jsonResponse["poe1pt"];

Раздается по id в нужные ячейки таблици.  Но как и по какому признаку это делается. По идее надо проанализировать переменную чтоб вытащить от туда данные. У меня вообще приходит строковый маасив

 

 

 

web_server.PNG

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

03.04.2022 в 21:50, Сёха сказал:

Привет!, во вложении пример страницы с JSON. Я конечно новичок в этом, может сделал не правильно или не оптимально... но работает...

 


//Если есть данные
	if (len_data)...
      
//Если строка "GET /", то значит это запрос HTTP
	if (strncmp((char*)tcp_pkt->data,"GET /", 5) == 0)...
      
if(strstr((char*)tcp_pkt->data,"rd175phy"))
    {
      char buf[50] = {0};
      char test[5] = {0};
      
      char *pos = strstr((char*)tcp_pkt->data,"rd175phy");
      test[0] = *(pos+9);
      if(*(pos+10)!=' ') test[1] = *(pos+10);
      char phy_addr = atoi(test);
      ...
        

 

index.html 4 kB · 3 скачивания

Добрый день. Я новичек в програмировании как на Си и вообще нуб JS.

Так у меня и не получилось использовать технологию JSON.   

На сервере вормирую посыку при запросе браузера. Сама посылка формируется 

void serializeToJSON (char *outArrData, const measTemp *tempData ){
  char temp1[]="\"temp1\":";
  char temp2[]="\"temp2\":";
  char temp3[]="\"temp3\":";

  sprintf (outArrData, "{%s%s,%s%s,%s%s}",temp1,tempData->sensorOnetemp,temp2,tempData->sensorTwotemp,temp3,tempData->sensorThreetemp);

По вашему примеру написал сначала попробовал принять чисто строку написав в скрипте 

xhr.responseType = "text"; все работает получаю стандартную на мой взгляд JSON строку

в косоле выводиться {"temp1":+28.563,"temp2":+28.563,"temp3":"+temp"} 192.168.1.193:39:17

когда по вашему примеру JS пишу

    function Timer1() { // функция для запроса данных
      xhr.open("GET", "content.html?r=" + Math.random(), true); //Math.random() - защита от кеширования
      xhr.responseType = "json"; // преобразование ответа JSON в обьект JS
      xhr.onload = function(oEvent) {

         
           
            var data=xhr.responseText;
            var jsonResponse = JSON.parse(data);
            console.log(data);

                        document.getElementById('sensor1').innerHTML = jsonResponse["temp1"];    
                        document.getElementById('sensor2').innerHTML = jsonResponse["temp2"];
                        document.getElementById('sensor3').innerHTML = jsonResponse["temp3"];

      }
      xhr.send(null);
      idTimer1 = setTimeout("Timer1()", 1000);
    }

в консоль выводит

 Uncaught DOMException: XMLHttpRequest.responseText getter: responseText is only available if responseType is '' or 'text'. 192.168.1.193:22

Подскажите что я делаю не так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот это ваша json строка?

{"temp1":+28.563,"temp2":+28.563,"temp3":"+temp"} 192.168.1.193:39:17

IP адрес и почему-то два порта тоже хотите чтобы передавался как json? Тогда они странно как-то там находятся.

Возможно вам еще wireshark поможет чтобы видеть что в действительности передается по сети. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

50 минут назад, uriy сказал:

Вот это ваша json строка?


{"temp1":+28.563,"temp2":+28.563,"temp3":"+temp"} 192.168.1.193:39:17

IP адрес и почему-то два порта тоже хотите чтобы передавался как json? Тогда они странно как-то там находятся.

Возможно вам еще wireshark поможет чтобы видеть что в действительности передается по сети. 

Добрый день.

Ну если я в скрипте пишу  xhr.responseType = "text"; то на страничке в браузере выводиться строка {"temp1":+28.563,"temp2":+28.563,"temp3":"+temp"}

которую формирует сервер микроконтроллера при этом при применении  console.log(xhr.response); в скрипте вывод консоль браузера 

вот такое {"temp1":+28.563,"temp2":+28.563,"temp3":"+temp"} 192.168.1.193:39:17. Про IP адресс и два потока не понял. JS ранее не использовал. 

А при попытке применения вот такого кода 

     xhr.responseType = "json"; // преобразование ответа JSON в обьект JS
      xhr.onload = function(oEvent) {        
            var data=xhr.responseText;
            var jsonResponse = JSON.parse(data);

в консоле вот такое сообщение

Uncaught DOMException: XMLHttpRequest.responseText getter: responseText is only available if responseType is '' or 'text'. 192.168.1.193:22
    onload http://192.168.1.193/:22
    (Асинхронный: EventHandlerNonNull)
    Timer1 http://192.168.1.193/:18
    <анонимный> http://192.168.1.193/:32

 

Изменено пользователем reg33

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...