zoukankan      html  css  js  c++  java
  • jquery.form.min.js的ajaxSubmit上传Excel文件,后台返回不是标准json格式回调函数中 textstatus报错parsererror

    今天发现在返回值正确的情况下,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数据,可以解析出来做操作。
    
    


  • 相关阅读:
    2016-10-17: source insight插件
    Reactor模式通俗解释
    2016-09-19: linux后台运行
    2016-08-16: 检测函数是否存在的C++模板
    2016-08-16: copy-and-swap
    2016-08-15:从YUV420P中提取指定大小区域
    2016-08-15: C++ traits
    2016-08-05:samba服务器配置
    LINQ 根据指定属性名称对序列进行排序
    Resharper
  • 原文地址:https://www.cnblogs.com/sunny3158/p/11321783.html
Copyright © 2011-2022 走看看