您的位置:首页 > 理论基础 > 计算机网络

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息