sunny123456

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  1796 随笔 :: 22 文章 :: 24 评论 :: 226万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

今天发现在返回值正确的情况下,ajax走error方法,没有走success方法,使用以下方法自测

原代码:
$.ajax({
url: environment.serverUrl + '/questionClassify/modify',
type: 'put',
data: JSON.stringify(body),
async: false,
// 返回的数据类型是json
dataType: 'application/json',
contentType: 'application/json;charset=UTF-8',
success: function (data) {
alert(data.message);
},
error: function (data) {
alert(data.responseText);
}
});

自测修改代码:
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
}

 

运行结果:

alert(XMLHttpRequest.status); // 弹出 200 正常
alert(XMLHttpRequest.readyState); // 弹出 4 正常
alert(textStatus); // 弹出parsererror错误
alert(XMLHttpRequest.status); // 弹出 200 正常 alert(XMLHttpRequest.readyState); // 弹出 4 正常 alert(textStatus); // 弹出parsererror错误


parsererror错误是返回类型错误,在原代码中dataType: ‘application/json’,我指定了返回值为json,所以后端一定要返回标准格式的json字符串,要不jquery1.4+以上版本会报错的,因为不是用eval生成对象了,用的JSON.parse,如果字符串不标准就会报错。

解决方法:

先把 dataType: 'application/json',注释掉
在 success:function(data,textStatus){
console.log(data);
观察显示的串是否符合 json 格式


最后发现返回的值的确是json格式,但不是标准json格式,所有报错,在下水准太低,不会转为标准格式,所有我就把dataType: ‘application/json’,彻底注释掉了,不指定返回值类型了。
---------------------
版权声明:本文为CSDN博主「郭满亮-Felix」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/G165945348/article/details/85226142

 

查看jquery.form.min.js 源码得知有三个方法

options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
        var context = options.context || this ;    // jQuery 1.4+ supports scope context
        for (var i=0, max=callbacks.length; i < max; i++) {
            callbacks[i].apply(context, [data, status, xhr || $form, $form]);
        }
    };

    if (options.error) {
        var oldError = options.error;
        options.error = function(xhr, status, error) {
            var context = options.context || this;
            oldError.apply(context, [xhr, status, error, $form]);
        };
    }

     if (options.complete) {
        var oldComplete = options.complete;
        options.complete = function(xhr, status) {
            var context = options.context || this;
            oldComplete.apply(context, [xhr, status, $form]);
        };
    }

所以应用 complete 函数做回调函数,如果后台返回的不是标准json格式 Status的值会是 parsererror
function deleteform(){
$('#addExcelForm'){
  url:"",
  type:"POST",
  timeout:10000,
  dataType:'json',
  complete:functioin(xhr,Status){
    if(Stauts=='success'){
      var respMessage = xhr.responseText;
      if(respMessage.indexOf("Message")!=-1){
      var message = $.parseJSON(respMessage)
      if(message.message="上传成功" ){alert (message.message+message.number)}
     }
    }
 }
}
}

//responseText 为后台传的json数据,可以解析出来做操作。



posted on   sunny123456  阅读(646)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示