http实时刷新数据Ajax,stm32单片机

环境:
keil,vscode,stm32f407,lwip

涉及到技术:ajax

一.前端代码

<!DOCTYPE html>

<html>

<head>	
	<meta http-equiv=X-UA-Compatible content="IE=11">

<style>
</style>

<script>
	function myFun(){
		var xmlhttp;
		if(window.XMLHttpRequest){
			xmlhttp = new XMLHttpRequest();
		}else{
			alert('不支持');
		}
		xmlhttp.onreadystatechange = function(){
			if(xmlhttp.readyState==4&&xmlhttp.status ==200){
			//console.log(xmlhttp.responseText)
			//document.getElementById("a").value = xmlhttp.responseText;
					let data = JSON.parse(xmlhttp.response);
					document.getElementById('a').value=data[0].name;
                        

			}
		}
		xmlhttp.open("GET","/read.json",true);
		//xmlhttp.open("GET","readfalsh.cgi",true);
		xmlhttp.send();
	}
</script>

</head>

<body>
    <p>hello </p>
	<p> <input name="123"  id="a"></p>
	<button type="button" onClick="myFun()">点击</button>
</body>

</html>

xmlhttp.open(“GET”,“/read.json”,true);
这里的true就是异步刷新,如果使用false就是要同时刷新网页。

调用方法:

1、直接调用 myFun 函数: 在页面底部的 <script> 标签中添加如下代码:
·······················
myFun();
</script>
2、使用按钮触发:
<button type="button" onClick="myFun()">点击</button>

二、单片机发送json格式文件给http

·······················
else if((strncmp(data, "GET /read.json",14)==0)){
	//char XML[50];
	//sprintf(XML,"[{\"name\":\"%d\"}]",server_port);
	//tcp_write(pcb,XML,strlen(XML),TCP_WRITE_FLAG_COPY);
	tcp_write(pcb,"[{\"name\":\"1\"}]",19,TCP_WRITE_FLAG_COPY);


·······················

这里的 name也就是data[0].name,**data[0]指的是json格式里的第一个{}**里的内容。

当然,关于单片机这一处理也可以考虑使用cjson,具体使用网络上有其使用方法。

请教各位,笔者这里遇到的问题if(xmlhttp.readyState==4)在这里始终不进去,在浏览器端,F12进入开发者模式,进行前端的代码调试发现,数值最多到3,意思是可能没有接收完。

在这里插入图片描述

补充:网页是用vscode+插件:
chinese(中文包),
live server(鼠标右键就可以仿真在浏览器里),
vscode-icons(看的好看),会了吧(翻译插件)

建议先在vscode里把前端的功能测试好,再结合单片机进行总体测试。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在STM32上实现Ajax功能,需要根据Ajax的工作原理和STM32的特点进行相应的设计和开发。 首先,Ajax是一种通过在后台进行异步通信的技术,可以在不刷新整个页面的情况下,实现页面与服务器之间的数据交互。在STM32上实现Ajax需要借助一些网络通信模块,如以太网模块或Wi-Fi模块。 其次,需要在STM32上运行一个Web服务器,该服务器能够接收来自前端页面的Ajax请求并处理。可以使用已有的Http服务器库进行开发,例如lwIP库。 具体实现的步骤如下: 1. 配置和初始化以太网或Wi-Fi模块,使其能够连接到网络。 2. 基于lwIP库构建一个简单的Web服务器,监听特定的端口。 3. 接收来自前端页面的Ajax请求,并解析其中的参数和数据。 4. 根据请求的参数和数据进行相应的处理,例如查询数据库或执行某些操作。 5. 将处理结果封装成HTTP响应,发送给前端页面。 6. 前端页面通过回调函数处理服务器的响应,更新页面的内容。 需要注意的是,由于STM32有限的资源,可能无法实现复杂的前端页面和大量的数据处理。因此,在设计应用时,需要根据STM32的资源限制进行适当的优化和限制。 总结而言,要在STM32上实现Ajax功能,需要通过网络模块和Web服务器库实现异步通信和数据交互的功能,同时需要注意STM32的资源限制,进行适当的优化和限制。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值