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数据,可以解析出来做操作。
    
    


  • 相关阅读:
    AJAX异步传输——以php文件传输为例
    js控制json生成菜单——自制菜单(一)
    vs2010中关于HTML控件与服务器控件分别和js函数混合使用的问题
    SQL数据库连接到服务器出错——无法连接到XXX
    PHP错误:Namespace declaration statement has to be the very first statement in the script
    【LeetCode】19. Remove Nth Node From End of List
    【LeetCode】14. Longest Common Prefix
    【LeetCode】38. Count and Say
    【LeetCode】242. Valid Anagram
    【LeetCode】387. First Unique Character in a String
  • 原文地址:https://www.cnblogs.com/sunny3158/p/11321783.html
Copyright © 2011-2022 走看看