javascript - 为什么 AJAX GET 请求只能工作一次?

标签 javascript jquery node.js xmlhttprequest

我正在尝试运行一个脚本来切换 WebApp 上的一些电源插头,它工作得很好,但问题来了,它只能工作一次,我不明白为什么。 我还认识到,当我调用该函数时,XHR 请求会永远持续下去,而不会立即收到响应。

这是我的 Node JS 服务器和 Web 应用程序上的函数:

 function ajaxChangePlug(num,state) {
                $.ajax({
                    url: `/api/${num}/${state}`,
                    type: "GET",
                    data: { 
                        state: state,
                        num: num
                    },
                    dataType: "json",
                })
            };
        function handle1(num,state){
                ajaxChangePlug(num,state);
                if (state === "on") {
                    document.getElementById("1").setAttribute( "onClick", `handle1(${num},'off')`);
                    document.getElementById("1").src=`/resources/${num}_on.png`
                } else {
                    document.getElementById("1").setAttribute( "onClick", `handle1(${num},'on')`);
                    document.getElementById("1").src=`/resources/${num}.png`
                }    
            };
server.get('/api/:num/:state', (req, res) => {
    var state = req.params.state;
    var num = req.params.num;
    if(state === 'on'){
        shell.exec(`/home/pi/mynode/${num}${state}_on.sh`);

    }else{
        shell.exec(`/home/pi/mynode/${num}${state}_off.sh`);        
    }
});

最佳答案

您应该像这样等待前端的响应:

$.ajax({
url: `/api/${num}/${state}`,
type: "GET",
data: {
	state: state,
	num: num
},
dataType: "json",
success: function (data) {
	if (data.state === "on") {
		document.getElementById("1").setAttribute("onClick", `handle1(${num},'off')`);
		document.getElementById("1").src = `/resources/${num}_on.png`
	} else {
		document.getElementById("1").setAttribute("onClick", `handle1(${num},'on')`);
		document.getElementById("1").src = `/resources/${num}.png`
	}
}
})

在您的后端,您应该发送如下响应:

server.get('/api/:num/:state', (req, res) => {
	var state = req.params.state;
	var num = req.params.num;
	if (state === 'on') {
		shell.exec(`/home/pi/mynode/${num}${state}_on.sh`);
		res.send('on');
	} else {
		shell.exec(`/home/pi/mynode/${num}${state}_off.sh`);
		res.send('off')
	}
});

关于javascript - 为什么 AJAX GET 请求只能工作一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59444574/

相关文章:

javascript - 日期选择器在表单重新加载后显示选定的值

jquery - 为什么当我快速单击箭头控件图标时这个 jQuery slider 消失了?

jquery - 使用 jQuery 粘贴后删除空格

javascript - 当 http get 请求状态返回 404 时显示 Angular Material mat-error

javascript - Immutable.fromJS() 没有将我的 JSON 深入转换为不可变对象(immutable对象)

javascript - iMacros/Firefox/格式化结果

javascript - TypeScript - 是否有一个选项可以禁止在除 bool 值之外的任何内容之前使用“!”?

node.js - 快速 session :捆绑内存存储的替代方案

node.js - 如果 'id' 以数字开头,则 GET 请求在字符串为 'id' 的模型上失败 - Trailsjs

javascript - Jquery加载到div中,指定链接数据中的div