ajax实现 兼容ie,firefox等
2010-10-23 22:49
417 查看
转一个AJAX实现.
HttpXML.js:
function httpRequest(method,data,URL)
{
var Http = null;
try {
Http = new
ActiveXObject("Msxml2.XMLHTTP");
}
catch(e) {
try {
Http
= new ActiveXObject("Microsoft.XMLHTTP");
}
catch(oc) {
Http
= null;
}
}
if (!Http && window.XMLHttpRequest) {
Http = new XMLHttpRequest();
}
if (Http == null) {
alert("Your
browser cannot handle this script,you can try IE or Firefox.");
}
Http.open(method,URL,false);
Http.send(data);
var
response = Http.responseText;
delete(Http);
return response;
}
function XMLDatastore()
{
//类变量
var xmlDoc;
var
errorInfo;
var listOfNodes;
//类方法
this.init = init;
this.createNew = createNew;
this.loadFile
= loadFile;
this.loadXML = loadXML;
this.rowCount = rowCount;
this.colCount
= colCount;
this.getItem = getItem;
this.getItemByName =
getItemByName;
this.insertRow = insertRow;
this.addColumn =
addColumn;
this.setItem = setItem;
this.setItemByName =
setItemByName;
this.getXML = getXML;
this.getErrorInfo =
getErrorInfo;
this.destroy = destroy;
function init()
{
// code for IE
if
(window.ActiveXObject)
{
xmlDoc=new
ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
}
//
code for Mozilla, Firefox, Opera, etc.
else if
(document.implementation &&
document.implementation.createDocument)
{
xmlDoc =
document.implementation.createDocument('', '', null);
xmlDoc.async=false;
}
else
{
alert('Your
browser cannot handle this script,you can try IE or Firefox.');
}
}
function createNew()
{
root = xmlDoc.createElement("rows");
xmlDoc.appendChild(root);
listOfNodes
= xmlDoc.documentElement.childNodes;
}
function loadFile(fileName)
{
var result = false;
xmlDoc.load(fileName);
root
= xmlDoc.getElementsByTagName(xmlDoc.childNodes[0].tagName)[0];
if
(root.childNodes[1] == null) {
listOfNodes =
xmlDoc.documentElement.childNodes;
}
else {
listOfNodes =
root.getElementsByTagName(root.childNodes[1].tagName);
}
result
= true;
return result;
}
function loadXML(xml)
{
var result = false;
if
(navigator.appName.indexOf("Internet Explorer") == -1) {
var
parser=new DOMParser();
xmlDoc=parser.parseFromString(xml,"text/xml");
if
(xmlDoc.documentElement) {
result = true;
listOfNodes =
xmlDoc.documentElement.childNodes;
}
}
else {
xmlDoc.loadXML(xml);
if(xmlDoc.parseError
!=0)
errorInfo = xmlDoc.parseError.reason;
else
{
result
= true;
listOfNodes = xmlDoc.documentElement.childNodes;
}
}
return result;
}
function rowCount()
{
return listOfNodes.length;
}
function colCount()
{
var cols = 0;
if(rowCount()>0)
cols =
listOfNodes.item(0).childNodes.length;
return cols;
}
function getItem(rowNo,colNo)
{
var node =
listOfNodes.item(rowNo);
node = node.childNodes.item(colNo);
return node.text;
}
function getItemByName(rowNo,colName)
{
var node =
listOfNodes.item(rowNo);
var rowNodes = node.childNodes;
var
i;
for(i=0;i<rowNodes.length;i++)
{
node =
rowNodes.item(i);
if(node.tagName == colName) {
if
(node.text != undefined) {
return node.text;
}
else
{
return node.textContent;
}
}
}
}
function insertRow(rowNo)
{
var rowElement =
xmlDoc.createElement("row");
if(rowNo == -1)
{
xmlDoc.documentElement.appendChild(rowElement);
rowNo
= rowCount();
}
else
{
xmlDoc.documentElement.insertBefore(rowElement,listOfNodes.item(rowNo));
}
return rowNo;
}
function addColumn(rowNo,colName,value)
{
var colElement =
xmlDoc.createElement(colName);
var node = listOfNodes.item(rowNo);
node.appendChild(colElement);
node.lastChild.text
= value;
}
function setItem(rowNo,colNo,value)
{
var node =
listOfNodes.item(rowNo);
node = node.childNodes.item(colNo);
return node.text = value;
}
function setItemByName(rowNo,colName,value)
{
var
listOfCols = xmlDoc.documentElement.getElementsByTagName(colName);
var
node = listOfCols.item(rowNo);
return node.text = value;
}
function getXML()
{
/*if (window.XSLTProcessor) {
//
transformToDocument方式
var xsltProcessor = new XSLTProcessor();
//xmlDoc.load("../XmlFile/Common.xsl");
xsltProcessor.importStylesheet("../XmlFile/Common.xsl");
var
result = xsltProcessor.transformToDocument(xmlDoc);
var xmls =
new XMLSerializer();
return xmls.serializeToString(result);
}
else
{
return xmlDoc.transformNode(xmlDoc);
}*/
var xmlstr =
"<?xml version=/"1.0/" encoding=/"utf-8/"?>";
xmlstr +=
"<rows>";
for (i=0; i<listOfNodes.length; i++) {
xmlstr
+= "<row>";
rowNodes = listOfNodes.item(i).childNodes;
for(j=0;j<rowNodes.length;j++)
{
node
= rowNodes.item(j);
xmlstr += "<"+node.tagName+">";
if
(node.text != undefined) {
xmlstr += node.text;
}
else
{
xmlstr += node.textContent;
}
xmlstr +=
"</"+node.tagName+">";
}
xmlstr += "</row>";
}
xmlstr
+= "</rows>";
return xmlstr;
}
function getErrorInfo()
{
return errorInfo;
}
function destroy()
{
delete(xmlDoc);
}
}
使用例子1(返回简单的一个字符串):
var url =
"/include/ajax/review_vote.aspx?reviewid="+reviewid+"&votetype="+votetype+"&addtype="+addtype+"&time="+(new
Date()).getTime();
var response = httpRequest("get",null,url);
使用例子2(返回一个数据集):程序返回一个XML格式的数据集
var ds = new XMLDatastore();
ds.init();
var url =
"/include/ajax/common_ajax.aspx?action=getuserlocation";
var response
= httpRequest("get",null,url);
if(ds.loadXML(response) == true)
{
if
(ds.rowCount() == 0) {
searchFriend.innerHTML = "";
4000
}
else
{
var IsPrimary = "";
var Address = "";
for(i=0;i<ds.rowCount();i++)
{
IsPrimary
= ds.getItemByName(i,"IsPrimary");
Address =
ds.getItemByName(i,"Address");
}
}
}
ds.destroy();
还可以这样传参数:
var ds = new XMLDatastore();
ds.init();
ds.createNew();
ds.insertRow(-1);
ds.addColumn(0,"SortBy",SortBy.options[SortBy.selectedIndex].value);
ds.addColumn(0,"PageSize",PageSize);
ds.addColumn(0,"ListReviews",document.getElementById("MyReviewID").value);
var url = "/include/ajax/GetMyPageReview.aspx";
var response =
httpRequest("post",ds.getXML(),url);
HttpXML.js:
function httpRequest(method,data,URL)
{
var Http = null;
try {
Http = new
ActiveXObject("Msxml2.XMLHTTP");
}
catch(e) {
try {
Http
= new ActiveXObject("Microsoft.XMLHTTP");
}
catch(oc) {
Http
= null;
}
}
if (!Http && window.XMLHttpRequest) {
Http = new XMLHttpRequest();
}
if (Http == null) {
alert("Your
browser cannot handle this script,you can try IE or Firefox.");
}
Http.open(method,URL,false);
Http.send(data);
var
response = Http.responseText;
delete(Http);
return response;
}
function XMLDatastore()
{
//类变量
var xmlDoc;
var
errorInfo;
var listOfNodes;
//类方法
this.init = init;
this.createNew = createNew;
this.loadFile
= loadFile;
this.loadXML = loadXML;
this.rowCount = rowCount;
this.colCount
= colCount;
this.getItem = getItem;
this.getItemByName =
getItemByName;
this.insertRow = insertRow;
this.addColumn =
addColumn;
this.setItem = setItem;
this.setItemByName =
setItemByName;
this.getXML = getXML;
this.getErrorInfo =
getErrorInfo;
this.destroy = destroy;
function init()
{
// code for IE
if
(window.ActiveXObject)
{
xmlDoc=new
ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
}
//
code for Mozilla, Firefox, Opera, etc.
else if
(document.implementation &&
document.implementation.createDocument)
{
xmlDoc =
document.implementation.createDocument('', '', null);
xmlDoc.async=false;
}
else
{
alert('Your
browser cannot handle this script,you can try IE or Firefox.');
}
}
function createNew()
{
root = xmlDoc.createElement("rows");
xmlDoc.appendChild(root);
listOfNodes
= xmlDoc.documentElement.childNodes;
}
function loadFile(fileName)
{
var result = false;
xmlDoc.load(fileName);
root
= xmlDoc.getElementsByTagName(xmlDoc.childNodes[0].tagName)[0];
if
(root.childNodes[1] == null) {
listOfNodes =
xmlDoc.documentElement.childNodes;
}
else {
listOfNodes =
root.getElementsByTagName(root.childNodes[1].tagName);
}
result
= true;
return result;
}
function loadXML(xml)
{
var result = false;
if
(navigator.appName.indexOf("Internet Explorer") == -1) {
var
parser=new DOMParser();
xmlDoc=parser.parseFromString(xml,"text/xml");
if
(xmlDoc.documentElement) {
result = true;
listOfNodes =
xmlDoc.documentElement.childNodes;
}
}
else {
xmlDoc.loadXML(xml);
if(xmlDoc.parseError
!=0)
errorInfo = xmlDoc.parseError.reason;
else
{
result
= true;
listOfNodes = xmlDoc.documentElement.childNodes;
}
}
return result;
}
function rowCount()
{
return listOfNodes.length;
}
function colCount()
{
var cols = 0;
if(rowCount()>0)
cols =
listOfNodes.item(0).childNodes.length;
return cols;
}
function getItem(rowNo,colNo)
{
var node =
listOfNodes.item(rowNo);
node = node.childNodes.item(colNo);
return node.text;
}
function getItemByName(rowNo,colName)
{
var node =
listOfNodes.item(rowNo);
var rowNodes = node.childNodes;
var
i;
for(i=0;i<rowNodes.length;i++)
{
node =
rowNodes.item(i);
if(node.tagName == colName) {
if
(node.text != undefined) {
return node.text;
}
else
{
return node.textContent;
}
}
}
}
function insertRow(rowNo)
{
var rowElement =
xmlDoc.createElement("row");
if(rowNo == -1)
{
xmlDoc.documentElement.appendChild(rowElement);
rowNo
= rowCount();
}
else
{
xmlDoc.documentElement.insertBefore(rowElement,listOfNodes.item(rowNo));
}
return rowNo;
}
function addColumn(rowNo,colName,value)
{
var colElement =
xmlDoc.createElement(colName);
var node = listOfNodes.item(rowNo);
node.appendChild(colElement);
node.lastChild.text
= value;
}
function setItem(rowNo,colNo,value)
{
var node =
listOfNodes.item(rowNo);
node = node.childNodes.item(colNo);
return node.text = value;
}
function setItemByName(rowNo,colName,value)
{
var
listOfCols = xmlDoc.documentElement.getElementsByTagName(colName);
var
node = listOfCols.item(rowNo);
return node.text = value;
}
function getXML()
{
/*if (window.XSLTProcessor) {
//
transformToDocument方式
var xsltProcessor = new XSLTProcessor();
//xmlDoc.load("../XmlFile/Common.xsl");
xsltProcessor.importStylesheet("../XmlFile/Common.xsl");
var
result = xsltProcessor.transformToDocument(xmlDoc);
var xmls =
new XMLSerializer();
return xmls.serializeToString(result);
}
else
{
return xmlDoc.transformNode(xmlDoc);
}*/
var xmlstr =
"<?xml version=/"1.0/" encoding=/"utf-8/"?>";
xmlstr +=
"<rows>";
for (i=0; i<listOfNodes.length; i++) {
xmlstr
+= "<row>";
rowNodes = listOfNodes.item(i).childNodes;
for(j=0;j<rowNodes.length;j++)
{
node
= rowNodes.item(j);
xmlstr += "<"+node.tagName+">";
if
(node.text != undefined) {
xmlstr += node.text;
}
else
{
xmlstr += node.textContent;
}
xmlstr +=
"</"+node.tagName+">";
}
xmlstr += "</row>";
}
xmlstr
+= "</rows>";
return xmlstr;
}
function getErrorInfo()
{
return errorInfo;
}
function destroy()
{
delete(xmlDoc);
}
}
使用例子1(返回简单的一个字符串):
var url =
"/include/ajax/review_vote.aspx?reviewid="+reviewid+"&votetype="+votetype+"&addtype="+addtype+"&time="+(new
Date()).getTime();
var response = httpRequest("get",null,url);
使用例子2(返回一个数据集):程序返回一个XML格式的数据集
var ds = new XMLDatastore();
ds.init();
var url =
"/include/ajax/common_ajax.aspx?action=getuserlocation";
var response
= httpRequest("get",null,url);
if(ds.loadXML(response) == true)
{
if
(ds.rowCount() == 0) {
searchFriend.innerHTML = "";
4000
}
else
{
var IsPrimary = "";
var Address = "";
for(i=0;i<ds.rowCount();i++)
{
IsPrimary
= ds.getItemByName(i,"IsPrimary");
Address =
ds.getItemByName(i,"Address");
}
}
}
ds.destroy();
还可以这样传参数:
var ds = new XMLDatastore();
ds.init();
ds.createNew();
ds.insertRow(-1);
ds.addColumn(0,"SortBy",SortBy.options[SortBy.selectedIndex].value);
ds.addColumn(0,"PageSize",PageSize);
ds.addColumn(0,"ListReviews",document.getElementById("MyReviewID").value);
var url = "/include/ajax/GetMyPageReview.aspx";
var response =
httpRequest("post",ds.getXML(),url);
相关文章推荐
- ajax实现全选/取消全选(兼容ie,firefox)
- onbeforeunload事件中调用Ajax实现用户注销操作(兼容IE、Firefox、Chrome)
- onbeforeunload事件中调用Ajax实现用户注销操作(兼容IE、Firefox、Chrome)
- onbeforeunload事件中调用Ajax实现用户注销操作(兼容IE、Firefox、Chrome)
- js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
- js实现鼠标右键自定义菜单(弹出层),并与树形菜单(TreeView)、iframe合用(兼容IE、Firefox、Chrome)
- 兼容IE、新版Chrome、Firefox,实现本地图片等比例缩放预览
- 兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
- 一个超简单的JS拖拽实现代码(兼容IE,Firefox)
- textbox 在光标位置插入字符功能的js实现(兼容ie,firefox)
- AJAX w3school 以及IE、Firefox、Chrome 的JS代码兼容注意事项
- textbox 在光标位置插入字符功能的js实现(兼容ie,firefox)
- 代码短小的js div层拖动实现代码[兼容IE与Firefox]
- 兼容多浏览器实现半透明(Opera ie firefox)
- 简单HTML在线编辑器实现原理(兼容IE和FireFox)(转)
- JS图片左右无缝隙滚动的实现(兼容IE,Firefox 遵循W3C标准)
- javascript实现兼容ie与firefox下dom的xpath
- 兼容最新firefox、chrome和IE的javascript图片预览实现代码