当前位置:编程学习 > C#/ASP.NET >>

$.ajax 在datetype使用json格式时候为什么不稳定?

这是我写的一部分代码,ajax方法
//执行ajax请求,并且执行相关函数
//src 地址
//msg 参数
//type返回数据类型
//functionSuccess  访问成功执行的方法
//functionFailed   访问失败执行的函数
//functionOutTime  访问超时执行的函数
function ajaxGetData(src, msg,type, functionSuccess, functionFailed) {
    $.ajax({
        type: "post",
        url: src,
        data: msg,
        timeout: 30000,
        //dataType: ((type == null || type == "") ? "json" : type),
        dataType: type,
        contentType: "application/json;charset=utf-8",
        success: function (flag) {//请求成功
            functionSuccess(flag);
        },
        error: function (flag) {//请求失败
            alert("failed");
        }
    });
}


我在使用的的时候设置dataType为json格式,当我启动页面的时候,有时候是正常的,有的时候直接alert一个failed,这是为什么呀,还有些时候,能自行success,但是flag这个数据就不正确。
我的后台代码是这样子的

 context.Response.ContentType ="text/json;charset=UTF-8";
            
            //context.Response.Write("Hello World");
            SqlHelper help = new SqlHelper();

            StringBuilder str = new StringBuilder();

            //拼接sql
            str.Append("declare @i int;");
            str.Append("select @i=count(1) from table_book; ");
            str.Append("SELECT  case when @i>20 then 20 when @i<=20 then @i end num, image, bookName, originalWrite, briefIntroduction ");
            str.Append("FROM      table_book ");
            str.Append("ORDER BY storageTime DESC, id DESC");

            DataSet data = new DataSet();
            data=help.ExcuteQuery(str.ToString(), false);
            
            if ((data == null) || (data.Tables[0].Rows.Count <= 0))
            {
                return;
            }
            
            //序列化dataTable为json格式的数据
            serializeJsonFromDataTable serializeJsonData = new serializeJsonFromDataTable();//自定义的类
            string jsonContent = serializeJsonData.serializeJson(data.Tables[0],10,1);

            context.Response.Write(jsonContent);
            //context.Response.Write("{\"count\":\"1\",\"test\":\"3\"}");
            context.Response.End();


这里我的序列化采用的,本质就是输出这样的字符串:{"count":"1","msg":"1","item":[{"adf":"12","fda":"12"},{"adf":"fd","fda":"f易做图"}]}
字符串输出格式没有问题,就是上面的格式


那么我的问题究竟出现在哪里呢???

当我把前后台的输出文本格式都修改为text格式的时候,一点问题都没有…… --------------------编程问答-------------------- 把请求方式换成同步试试,默认是异步请求的。因为JSON字符串的解析也需要时间 --------------------编程问答-------------------- //刷新数据
this.getData = function () {
    ajaxGetData(this.AjaxSrc, { "filter": this.FilterJson, "pagesize": this.PageSize, "currentPage": this.CurrentPage }, this.DataType,
 function (msg) {//获取成功
     var controlId = ControlId;
     var content = msg;
     //获取内容
     var item = content.item;

     //清空所有指定div的子节点
     $("#" + controlId).html = "";

     //将列表绑定到div中显示
     for (var i = 0; i < item.length; i++) {
         var tableItem = formateTable(item[i].image, item[i].bookName, item[i].originalWrite, item[i].briefIntroduction, "", "", "", "");
         $("#" + controlId).append(tableItem);
     }
 },
 function (msg) {//获取失败
     alert("failed");
 });
};
}


我尝试了楼上所说的, 把async:false,,还是不稳定,有时候出错弹出failed,有时候是正确的,还有些时候出现成功执行,但是item为null, --------------------编程问答-------------------- 去下载一个工具叫fiddler 这个东西可以查看你ajax请求返还的结果是什么,然后debug进入js调试下就清楚了  --------------------编程问答-------------------- 你是如何测试的,不断刷新吗?看看你的错误状态码是多少
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,