各位大侠
(这个问题我在网上找了2天都没有找到合适的)前台我用XMLHttpRequest接受来自后台传入的数据,后台我有datatable(因为需要必须使用datatable)绑定数据源并输出字符,
问题是如何分页传输?
比如前台页面发送abcdef.aspx?page=2&pagesize=10
后台获取page=2和pagesize=10后就输出数量为10,页数2的页面请问如何实现?谢谢各位!!
(这个问题我在网上找了2天都没有找到合适的)前台我用XMLHttpRequest接受来自后台传入的数据,后台我有datatable(因为需要必须使用datatable)绑定数据源并输出字符,
问题是如何分页传输?
比如前台页面发送abcdef.aspx?page=2&pagesize=10
后台获取page=2和pagesize=10后就输出数量为10,页数2的页面请问如何实现?谢谢各位!!
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Ajax实现数据的查看、修改、删除</title>
</head><body onload="getAllOfID()">
<form >
<div >
<table>
<tr style="background-color:#fff5ee">
<td style="width: 80px">
<input id="btnBack" type="button" value="上一页" onclick="return btnBack_onclick()" />
</td>
<td style="width:80px">
<input id="btnNext" type="button" value="下一页" onclick="return btnNext_onclick()" />
</td>
<td style="width:160px">跳转到<input id="txtPageIndex" style="width: 60px" type="text" onkeypress="JudgeInput()" />页
</td>
<td style="width:100px">
<input id="ButtonJump" type="button" value="确定跳转" onclick="return ButtonJump_onclick()" />
</td>
<td><div id = "divPageNum" style="width:140px; background-color:#fff454" >
</div>
</td>
<td>跳转到</td>
<td>
<select id="SelectPage" style="width: 61px" onchange="SelectPageOnchange()" >
<option selected="selected"></option>
</select>
</td>
</tr>
</table>
<div>
<table style="width:800px">
<thead id="Thead" style="background-color:#ffcc66">
</thead>
<tbody id="Tbody" style="background-color:#ccffff">
</tbody>
</table>
</div>
<div id="divPageState">
<div id="divState" class="divFloatState" >fsf
</div>
</div>
</div>
</form>
</body>
</html>
var arrAllId = new Array();
var innerXmlHttp = null;
var AllPages = 0;
// 定义变量,设置每页显示数据条数
var MaxItemsPerPage = 10;
var XmlItems;
var ChangeIndex = 1;
//从数据库把关键子段的数据全部返回到一个数组中
function getAllOfID()
{
//创建Dom
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
xmlDoc.async = false;
//创建根节点
var root=xmlDoc.createElement("root");
root.text = "getAllID";
xmlDoc.appendChild(root);
xmlSend("GetInfo.aspx", xmlDoc,true, "getAllID") ;
}
function xmlSend(strURL, xmlDoc,bAysync, strCommand)
{
//创建了一个实例 MSXML2.XMLHTTP,该实例是一个 COM 对象,它为客户机与 HTTP 服务器的交互提供了一种方法。
innerXmlHttp = new ActiveXObject("Msxml2.XMLHTTP.3.0"); //调用 Open 方法,向其传递三个参数:"POST"、strURL(要请求的aspx页面)和 bAysync(表示使调用同步或同步)。
innerXmlHttp.open("POST", strURL, bAysync);
if(bAysync)
{
if(strCommand == "getAllID")
innerXmlHttp.onreadystatechange = getAllIDhandleStateChange;
else if(strCommand = "getItems")
innerXmlHttp.onreadystatechange = getItemshandleStateChange;
}
//使用 Send 方法将我们的请求发送到 HTTP 服务器
innerXmlHttp.send(xmlDoc);
}
function getAllIDhandleStateChange()
{
//readyState返回当前请求的状态.
//readyState == 4时,表示数据接收完毕,此时可以通过通过responseBody或responseText或responseXML获取完整的回应数据
if (innerXmlHttp.readyState == 4)
{
//接收数据
var xmlResult = innerXmlHttp.responseXML;
var root = xmlResult.documentElement;
if(root.nodeName == "Err")
alert(root.text);
else
{
//解析xml,并把所有的itemId放到数组中
var tableNodes = root.selectNodes("Table");
var j = 1;
for(i = 0; i < tableNodes.length; i++ )
{
arrAllId[j] = tableNodes[i].text;
j++;
}
AllPages = Math.ceil(arrAllId.length / MaxItemsPerPage);
document.getElementById("divPageNum").innerText ="总页数:" + AllPages ;
for(i = 0;i < AllPages;i++)
{
var opt = document.createElement("option");
opt.text=i+1;
opt.value=i;
document.getElementById("SelectPage").add(opt);
}
}
}
}
function getItemshandleStateChange()
{
//接收试题信息
if (innerXmlHttp.readyState == 4)
{
//接收数据
var xmlResult = innerXmlHttp.responseXML;
var root = xmlResult.documentElement;
if(root.nodeName == "Err")
alert(root.text);
else
{
var NodeItemInfo = root.selectNodes("//Table");
while(Tbody.rows.length > 0)
{
Tbody.deleteRow(0);
}
for(i = 0;i < NodeItemInfo.length;i++)
{
var ItemID = NodeItemInfo[i].firstChild.text;
var ItemValue = NodeItemInfo[i].lastChild.text;
CreateRow(ItemID,ItemValue);
}
}
}
}
// 创建表中的的行
function CreateRow(ID,Value)
{
var row = Tbody.insertRow();
CreateCell(row,ID);
CreateCell(row,Value);
CreateCell(row,"<img src='pic/edit.gif' class='pic' onclick='Edit()' />");
CreateCell(row,"<img src='pic/delete.gif' class='pic' onclick='Delete()' />");
}
// 创建表格行中的列
function CreateCell(row,Content)
{
var cell = row.insertCell();
cell.innerHTML = Content;
}
// 当图片按钮被点击时执行编辑和删除命令
// CommandName是图片传来的命令字符串
function Edit()
{
var node = event.srcElement.parentNode.parentNode.sectionRowIndex;
var ItemID = Tbody.rows[node].cells[0].innerText;
window.showModalDialog("QuestionAdd.aspx?ItemID="+ItemID,"试题浏览/修改","dialogHeight:500px;dialogWidth:820px");
//return false;
}
function Delete()
{
var node = event.srcElement.parentNode.parentNode.sectionRowIndex;
var ItemID = Tbody.rows[node].cells[0].innerText;
var ShowMsg = confirm("你确定要删除编号为:"+ ItemID +" 的试题么?");
Tbody.removeChild(Tbody.rows[node]);
}
// 当跳转按钮被点击时执行表页面的跳转
function ButtonJump_onclick()
{
var pageIndex = document.getElementById("txtPageIndex").value;
ChangeIndex = pageIndex;
JudgeUpAndDownDispaly();
pageIndex = Math.round(pageIndex);
if(pageIndex <= 0 || pageIndex > AllPages)
{
alert("请输入合法数字!");
return;
}
document.getElementById("txtPageIndex").value = pageIndex;
// 调用方法执行表的翻页
GetArrayItemInfo(pageIndex);
//显示现在所在页数及总页数
DispalyPageState();
}
{
if(ChangeIndex<=1)
{
document.getElementById("btnBack").disabled = true;
}
else
document.getElementById("btnBack").disabled = false;
if(ChangeIndex>=21)
{
document.getElementById("btnNext").disabled = true;
}
else
document.getElementById("btnNext").disabled = false; }
// 如果表头已经存在,怎不再创建
var flag = true;
function CreateThead()
{
if(flag)
{
CreateTheadText()
flag = false;
}
}
// 创建表头
function CreateTheadText()
{
var row = Thead.insertRow();
CreateCell(row,"试题编号");
CreateCell(row,"试题题干");
CreateCell(row,"预览/修改");
CreateCell(row,"删除");
}
// 根据得到的一组试题编号
// 发送至后台,返回这些编号的详细内容
function getItems(strIDs)
{
//创建Dom对象
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0"); xmlDoc.async = false;
//创建根节点
var root=xmlDoc.createElement("root");
root.text = "getItems";
var attr = xmlDoc.createAttribute("ids");
attr.value = strIDs;
root.setAttributeNode(attr);
xmlDoc.appendChild(root);
// 发送xml文档
xmlSend("GetInfo.aspx", xmlDoc,true,"getItems") ;
}
// 下拉框菜单被选择时执行
function SelectPageOnchange()
{
var SelectIndex = document.getElementById("SelectPage").selectedIndex;
ChangeIndex = SelectIndex;
GetArrayItemInfo(SelectIndex);
JudgeUpAndDownDispaly();
//显示现在所在页数及总页数
DispalyPageState();
}
// 用来发送用户选择的页数,并返回相应的试题信息
function GetArrayItemInfo(SelectIndex)
{
var FloorIndex = (SelectIndex-1) * MaxItemsPerPage + 1;
var UpIndex = SelectIndex * MaxItemsPerPage;
var strID = "";
for(i = FloorIndex;i < UpIndex;i++)
{
strID += "'" + arrAllId[i] + "',";
}
if (strID.length > 0)
{
strID = strID.substring(strID, strID.length-1); //去掉最后一个','
// 调用方法发送试题编号并得到放回的试题信息
getItems(strID);
}
// 调用方法创建表头
CreateThead();
}
// 上一页按钮点击时触发的事件
function btnBack_onclick()
{
document.getElementById("btnNext").disabled = false;
if(document.getElementById("txtPageIndex").blur())
{
var a = document.getElementById("txtPageIndex").value;
}
var a = document.getElementById("SelectPage").selectedIndex;
ChangeIndex--
if(ChangeIndex <= 1)
{
ChangeIndex = 1;
document.getElementById("btnBack").disabled = true;
}
GetArrayItemInfo(ChangeIndex);
//显示现在所在页数及总页数
DispalyPageState();
}
// 下一页按钮点击时触发的事件
function btnNext_onclick()
{
document.getElementById("btnBack").disabled = false;
ChangeIndex++;
if(ChangeIndex >= AllPages)
{
ChangeIndex = AllPages;
document.getElementById("btnNext").disabled = true;
}
// 调用方法显示试题信息并执行翻页处理
GetArrayItemInfo(ChangeIndex)
//显示现在所在页数及总页数
DispalyPageState();
}
// 显示总页数和当前所处页数
function DispalyPageState()
{
document.getElementById("divPageState").innerText ="当前页:" + ChangeIndex + "\t\t\t\t" + "总页数:" + AllPages;
document.getElementById("txtPageIndex").value = "";
}
// 判断用户输入的内容,如果不是数字,则提示用户
function JudgeInput()
{
if(event.keyCode < 48 || event.keyCode > 57)
{
event.keyCode = 0;
alert("只允许输入数字!");
}
}
</script>我以前做考试系统的一个小例子,希望对你有帮助预祝国庆节快乐!~~
你的那个分页效果 AspNetPager 可以轻松搞定。 关于 AspNetPager 及用法,你可以在网上搜在一大堆
提示一下.