$.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