【前端问题】ajax状态码200却进入error分支不执行success分支内容

在这里插入图片描述
代码如下,很简单的jquery发送ajax操作:

         $("#form").click(function(){
                var str = $("#form5").serializeArray()[0].value;
                var k=$("#form5").serializeArray()[1].value;
                var n=$("#form5").serializeArray()[2].value;
                       
                var temp = ({
                    str:$("#form5").serializeArray()[0].value,
                    k:$("#form5").serializeArray()[1].value,
                    n:$("#form5").serializeArray()[2].value,
                });   

                    $.ajax({
                      
                        url:http+"value",
                        type:"GET",
                        dataType:"json",
                        data:temp,
                                // 这里把表单里面的数据放在这里传到后台
                        success:function(res){
            
                            document.getElementById('jg5').innerHTML =res.data; 
                           
                        }  ,
                        error:function(res){          
                            console.log('error'); 
                        } 
                        
                    })
                    return false;
                })    

然而我们却得不到想要的结果
控制台会打印出error,明显进入了error分支
这个是由于dataType设置问题导致的
前端设置dataType:“json”,但后台传来的数据如果不是严格的json就会报错
但是我们有的时候会发现,明明后台传来的就是标准json啊!
例如我这个:
在这里插入图片描述
现在的解决办法只有一个了 那就是
把dataType:"json"修改为“text”
前端自己进行字符串分隔!
修改代码如下

                $("#form").click(function(){
                var str = $("#form5").serializeArray()[0].value;
                var k=$("#form5").serializeArray()[1].value;
                var n=$("#form5").serializeArray()[2].value;
                       
                var temp = ({
                    str:$("#form5").serializeArray()[0].value,
                    k:$("#form5").serializeArray()[1].value,
                    n:$("#form5").serializeArray()[2].value,
                });   

                    $.ajax({
                      
                        url:http+"value",
                        type:"GET",
                        dataType:"text",
                        data:temp,
                        
                                // 这里把表单里面的数据放在这里传到后台
                        success:function(res){
                            console.log(res.length);
                            str = ''
                            for(let i=17;i<(res.length)-1;i++)
                            {
                               var str = str + res[i];
                            }
                            console.log(str);
            
                            document.getElementById('jg5').innerHTML =str; 
                           
                        }  ,
                        error:function(res){          
                            console.log(111); 
                        } 
                        
                    })
                    return false;
                })
               

一个for循环轻松搞定!
最后我们可以看到控制台打印了我们想要的结果
在这里插入图片描述
后记:
虽然这次解决了问题,但是还是有一些没有彻底挖掘的疑点
当请求为post时,后台发来的标准json就可以接收,而get时就不能接收了,只能靠text字符串分隔曲线救国,不知道是什么原因呢?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值