最近在做项目是使用Ajax异步取数据,在用的时候发现,当我们在用重复的Url异步提取数据时,由于IE缓存,使我们得不到请求的数据,解决的办法是在URL参数后加上一个实时变化的参数,如new Date().getTime()。
例如,我们页面上有个dropdownList下拉列表控件,我想实现选择不同的值,得到相应的数据,我们的实现方式是:
1、添加onchange事件,给一个方法名称;
2、编写异步提取数据的function:
$.ajax({
type: "GET",
contentType: "application/text",
url: "异步请求的页面名称.aspx",
data: { 参数1名称: 参数值1, 参数2名称: 参数值2,num: new Date().getTime() },
dataType: 'text',
success: function(result) {
//根据返回的result处理页面数据
}
});
例如:联动下拉框
function getTeachersList() {
//异步读取联动列表
$.ajax({
type: "GET",
contentType: "application/json",
url: "Url.aspx",
data: { 参数1: $("#drp一级下拉框").val(), num: new Date().getTime() },
dataType: 'json',
success: function(result) {
//数据转换
var dt = eval(result);
if (dt.tab.length > 0) {
//去掉dropdownlist下所有选项
$("#drp二级下拉框 option").remove();
//添加一条选项
$("#drp二级下拉框").append("<option value='b'>请选择</option>");
for (var i = 0; i < dt.tab.length; i++) {
//循环将返回的联动列表添加到下拉框中
$("#drp二级下拉框").append("<option value=" + dt.tab[i].teach_id + ">" + dt.tab[i].teach_name + "</option>");
}
}
else {
//没有查询到联动列表时将隐藏控件清空
//去掉dropdownlist下所有选项
$("#drp二级下拉框 option").remove();
//添加一条选项
$("#drp二级下拉框").append("<option value='b'>暂无人</option>");
}
}
});
}
Url.aspx页面CS代码
DataTable dt = GetSelectData()
//将table转换成Json数据
strJson = DataTableToJson(dt);
//返回Json数据
if (strJson.ToString() != "")
{
Response.Write(strJson);
}
else
{
Response.Write("no");
}
Response.End();
DataTableToJson方法:
public static string DataTableToJson(DataTable dt)
{
JsonWriter writer = new JsonWriter();
JsonObject content = new JsonObject();
JsonArray Orders = new JsonArray();
JsonObject Order;
JsonObject OrderItem = new JsonObject();
for (int i = 0; i < dt.Rows.Count; i++)
{
Order = new JsonObject();
for (int j = 0; j < dt.Columns.Count; j++)
{
Order.Add(dt.Columns[j].ColumnName, dt.Rows[i][j].ToString());
}
Orders.Add(Order);
}
content.Add(dt.TableName, Orders);
content.Write(writer);
writer = new IndentedJsonWriter();
content.Write(writer);
return writer.ToString();
}