weixin_57177514 2023-09-13 23:34 采纳率: 100%
浏览 4
已结题

nodejs 如何在客户端处理 删除请求返回的数据,怎么得到一个jason的结果并处理呢,Unexpected end of JSON input


 

//delete  这里是我的服务器端nodejs 请求删除的代码
//根据型号查询的结果返回并显示
app.post('/delete',urlencodedParser,function(req,res){
            console.log("delete...");
            var val = req.body;
            var jobname = val.jobname;
            console.log("jobname:" + jobname);

        pool.getConnection(function(err,connection){
            if(err){
                res.send('Can not connect to MySql DB');
                return  console.log(err);
            }else{
                var infomation;
                var dataFailed= {result:false,
                                  msg:'删除失败'};            
                connection.query("delete from info where jobname = ? ",jobname,function(err,result){
                    if(err){
                        infomation='Search failed';
                        
                        res.send(JSON.stringify(dataFailed));
                    }
                    if(result.affectedRows !== 1 ){
                        console.log('删除失败');
                        res.send(JSON.stringify(dataFailed));
                    }else{
                        console.log("删除成功!");
                       var data= {result:true,
                                  msg:'提交成功'}; 

                        res.send(JSON.stringify(data));
                        
                    }
                    


                })
            }
        });
        
});


        //这里是我的html页面 javascript onclick的事件
    //根据jobname删除对应的记录
    function deleteResult(){
        
        var obj={
            name:document.getElementById("jobname").value,
        };
        if(obj.name==""){
            document.getElementById("myspan").innerText = "*请填入你要删除的型号";
            return;
        }

         var form1 = document.getElementById("form1");
            form1.method = "post";
            form1.action = "/delete";
            form1.target = "iframeContent";
            form1.submit();    
            
        
//客户端这里该怎么写呢  怎么才能获取从从服务器返回过来的jason数据并解析呢,谢谢 
//客户端这里该怎么写呢  怎么才能获取从从服务器返回过来的jason数据并解析呢,谢谢 
//客户端这里该怎么写呢  怎么才能获取从从服务器返回过来的jason数据并解析呢,谢谢 
//客户端这里该怎么写呢  怎么才能获取从从服务器返回过来的jason数据并解析呢,谢谢 
我有iframe隐藏域,但是结果一直为空,    
        //const response = JSON.parse(result);
        //alert("result" + result);
        //alert("res:" + res);
        
        
        
    }    


  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-09-13 23:49
    关注

    引用 皆我百晓生 小程序回复内容作答:

    在客户端处理删除请求返回的JSON数据,你可以使用XMLHttpRequest对象发送异步请求,然后在其回调函数中处理返回的数据。

    首先,你需要修改HTML页面的deleteResult函数,将异步请求发送到服务器:

    function deleteResult() {
        var obj = {
            name: document.getElementById("jobname").value,
        };
        if (obj.name == "") {
            document.getElementById("myspan").innerText = "*请填入你要删除的型号";
            return;
        }
    
        var xhr = new XMLHttpRequest();
        xhr.open('POST', '/delete');
        xhr.setRequestHeader('Content-Type', 'application/json');
        xhr.onreadystatechange = function() {
            if (xhr.readyState === XMLHttpRequest.DONE) {
                if (xhr.status === 200) {
                    var response = JSON.parse(xhr.responseText);
                    if (response.result) {
                        // 删除成功
                        console.log(response.msg);
                    } else {
                        // 删除失败
                        console.log(response.msg);
                    }
                } else {
                    // 请求失败
                    console.log("请求删除失败");
                }
            }
        };
        xhr.send(JSON.stringify(obj));
    }
    

    在上述代码中,我们使用XMLHttpRequest对象创建一个POST请求,发送到服务器的/delete路径。请求头部设置为Content-Type: application/json以便服务器可以正确解析请求体。然后,我们指定一个回调函数,当请求状态发生变化时,会调用该函数。当请求完成(readyState为XMLHttpRequest.DONE)时,我们根据响应的status来判断请求是否成功。如果成功,我们将返回的JSON数据解析为JavaScript对象,并根据返回的结果进行相应的处理。

    另外,你还需要将服务器的响应头部的Content-Type设置为application/json,并使用JSON.stringify()将要发送的JSON对象转换为字符串。

    在服务端修改代码如下:

    app.post('/delete', urlencodedParser, function(req, res) {
        console.log("delete...");
        var val = req.body;
        var jobname = val.jobname;
        console.log("jobname:" + jobname);
    
        pool.getConnection(function(err, connection) {
            if (err) {
                res.send('Can not connect to MySql DB');
                return console.log(err);
            } else {
                var dataFailed = {
                    result: false,
                    msg: '删除失败'
                };
                connection.query("delete from info where jobname = ? ", jobname, function(err, result) {
                    if (err) {
                        res.setHeader('Content-Type', 'application/json');
                        res.send(JSON.stringify(dataFailed));
                    } else if (result.affectedRows !== 1) {
                        console.log('删除失败');
                        res.setHeader('Content-Type', 'application/json');
                        res.send(JSON.stringify(dataFailed));
                    } else {
                        console.log("删除成功!");
                        var data = {
                            result: true,
                            msg: '提交成功'
                        };
    
                        res.setHeader('Content-Type', 'application/json');
                        res.send(JSON.stringify(data));
                    }
                })
            }
        });
    
    });
    

    在上述代码中,我们使用res.setHeader('Content-Type', 'application/json')将响应头部的Content-Type设置为application/json,并使用JSON.stringify()将返回的JSON对象转换为字符串。

    这样,客户端就可以接收到服务器返回的JSON数据并进行解析和处理。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月22日
  • 已采纳回答 9月14日
  • 创建了问题 9月13日

悬赏问题

  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
  • ¥15 数字信号处理考试111
  • ¥100 关于#audobe audition#的问题,如何解决?
  • ¥15 allegro17.2生成bom表是空白的
  • ¥15 请问一下怎么打通CAN通讯
  • ¥20 如何在 rocky9.4 部署 CDH6.3.2?
  • ¥35 navicat将excel中的数据导入mysql出错
  • ¥15 rt-thread线程切换的问题
  • ¥15 高通uboot 打印ubi init err 22