欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ajax處理服務(wù)器返回的三種數(shù)據(jù)類(lèi)型方法

 更新時(shí)間:2016年10月17日 15:49:09   作者:_acme_  
這篇文章主要介紹了ajax如何處理服務(wù)器返回的三種數(shù)據(jù)類(lèi)型,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

其原理很簡(jiǎn)單,結(jié)構(gòu)上基本不變,只是改變處理返回?cái)?shù)據(jù)的方式.

1.Text/HTML格式
這種返回類(lèi)型處理很簡(jiǎn)單,直接就當(dāng)作字符串用就行了.為了方便使用,封裝成如下函數(shù):

/**
 * @function 利用ajax動(dòng)態(tài)交換數(shù)據(jù)(Text/HTML格式)
 * @param url  要提交請(qǐng)求的頁(yè)面
 * @param jsonData 要提交的數(shù)據(jù),利用Json傳遞
 * @param getMsg 這個(gè)函數(shù)可以獲取到處理后的數(shù)據(jù)
 */
function ajaxText(url,jsonData,getMsg)
{
  //創(chuàng)建Ajax對(duì)象,ActiveXObject兼容IE5,6
  var oAjax = window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");
  //打開(kāi)請(qǐng)求
  oAjax.open('POST',url,true);//方法,URL,異步傳輸
  //發(fā)送請(qǐng)求
  var data = '';
  for(var d in jsonData)  //拼裝數(shù)據(jù)
    data += (d + '=' +jsonData[d]+'&');
  oAjax.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  oAjax.send(data);
  //接收返回,當(dāng)服務(wù)器有東西返回時(shí)觸發(fā)
  oAjax.onreadystatechange = function ()
  {
    if(oAjax.readyState == 4 && oAjax.status == 200)
    {
      if(getMsg) getMsg(oAjax.responseText);
    }
  }
}

服務(wù)器端返回?cái)?shù)據(jù)格式如下:
例如:

//返回的是xml格式
//header("Content-Type:text/xml;charset=utf-8");
//返回的是text或Json格式
header("Content-Type:text/html;charset=utf-8");
//禁用緩存,是為了數(shù)據(jù)一樣的前提下還能正常提交,而不是緩存數(shù)據(jù)
header("Cache-Control:no-cache");
$username = $_POST['username']; //獲取用戶(hù)名
if(empty($username))
  echo '請(qǐng)輸入用戶(hù)名';
else if($username == 'acme')
  echo '用戶(hù)名已被注冊(cè)';
else
  echo '用戶(hù)名可用';

調(diào)用格式如下:

url = 'abc.php';
var jsonData={username:'acme',passw:'acme'};
ajaxText(url,jsonData,getMsg);
function getMsg(msg)
{
 //do something
}

2.XML格式

返回的是一個(gè)XML DOM對(duì)象,解析其中的數(shù)據(jù)就類(lèi)似于HTML DOM 編程. 比如通過(guò)name獲取標(biāo)簽對(duì)象(數(shù)組形式),再?gòu)脑摂?shù)組中獲取需要的標(biāo)簽對(duì)象,再?gòu)臉?biāo)簽對(duì)象中獲取文本值.
函數(shù)如下:

/**
 * @function 利用ajax動(dòng)態(tài)交換數(shù)據(jù)(XML格式)
 * @param url  要提交請(qǐng)求的頁(yè)面
 * @param jsonData 要提交的數(shù)據(jù),利用Json傳遞
 * @param tagName 要獲取值的標(biāo)簽名
 * @param getMsg 這個(gè)函數(shù)可以獲取到處理后的數(shù)據(jù)
 */
function ajaxXML(url,jsonData,tagName,getMsg)
{
  //創(chuàng)建Ajax對(duì)象,ActiveXObject兼容IE5,6
  var oAjax = window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");
  //打開(kāi)請(qǐng)求
  oAjax.open('POST',url,true);//方法,URL,異步傳輸
  //發(fā)送請(qǐng)求
  var data = '';
  for(var d in jsonData)  //拼裝數(shù)據(jù)
    data += (d + '=' +jsonData[d] + '&');
  oAjax.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  oAjax.send(data);
  //接收返回,當(dāng)服務(wù)器有東西返回時(shí)觸發(fā)
  oAjax.onreadystatechange = function ()
  {
    if(oAjax.readyState == 4 && oAjax.status == 200)
    {
      var oXml = oAjax.responseXML; //返回的是一個(gè)XML DOM對(duì)象
      var oTag = oXml.getElementsByTagName(tagName);
      var tagValue = oTag[0].childNodes[0].nodeValue;
      if(getMsg)getMsg(tagValue);
    }
  }
}

服務(wù)器端返回?cái)?shù)據(jù)格式如下:
例如:

//返回的是xml格式
header("Content-Type:text/xml;charset=utf-8");
//返回的是text或Json格式
//header("Content-Type:text/html;charset=utf-8");
//禁用緩存,是為了數(shù)據(jù)一樣的前提下還能正常提交,而不是緩存數(shù)據(jù)
header("Cache-Control:no-cache");
$username = $_POST['username']; //獲取用戶(hù)名
if(empty($username))
  echo '<user><mes>請(qǐng)輸入用戶(hù)名</mes></user>'; //這些標(biāo)簽可以自定義
else if($username == 'acme')
  echo '<user><mes>用戶(hù)名已被注冊(cè)</mes></user>';
else
  echo '<user><mes>用戶(hù)名可用</mes></user>';

調(diào)用格式如下:

var url = 'abc.php';
var jsonData = {username:'acme'};
ajaxXML(url,jsonData,'mes',getMsg);
function getMsg(msg)
 {
   //do something
 }

3.返回json

函數(shù)如下:

/**
 * @function 利用ajax動(dòng)態(tài)交換數(shù)據(jù)(Text/HTML格式),但是返回的是Json類(lèi)型的文本數(shù)據(jù)
 * @param url  要提交請(qǐng)求的頁(yè)面
 * @param jsonData 要提交的數(shù)據(jù),利用Json傳遞
 * @param getMsg 這個(gè)函數(shù)可以獲取到處理后的數(shù)據(jù)
 */
function ajaxJson(url,jsonData,getMsg)
{
  //創(chuàng)建Ajax對(duì)象,ActiveXObject兼容IE5,6
  var oAjax = window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");
  //打開(kāi)請(qǐng)求
  oAjax.open('POST',url,true);//方法,URL,異步傳輸
  //發(fā)送請(qǐng)求
  var data = '';
  for(var d in jsonData)  //拼裝數(shù)據(jù)
    data += (d + '=' +jsonData[d] + '&');
  oAjax.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  oAjax.send(data);
  //接收返回,當(dāng)服務(wù)器有東西返回時(shí)觸發(fā)
  oAjax.onreadystatechange = function ()
  {
    if(oAjax.readyState == 4 && oAjax.status == 200)
    {
      var json = eval('('+oAjax.responseText+')');//把傳回來(lái)的字符串解析成json對(duì)象
      if(getMsg)getMsg(json);
    }
  }
}

服務(wù)器端返回?cái)?shù)據(jù)格式如下:

例如:

//返回的是xml格式
//header("Content-Type:text/xml;charset=utf-8");
//返回的是text或Json格式
header("Content-Type:text/html;charset=utf-8");
//禁用緩存,是為了數(shù)據(jù)一樣的前提下還能正常提交,而不是緩存數(shù)據(jù)
header("Cache-Control:no-cache");
$username = $_POST['username']; //獲取用戶(hù)名
if(empty($username))
  echo '{"mes":"請(qǐng)輸入用戶(hù)名"}';
else if($username == 'acme')
  echo '{"mes":"用戶(hù)名已被注冊(cè)"}';
else
  echo '{"mes":"用戶(hù)名可用"}';

調(diào)用格式如下:

url = 'abc.php';
var jsonData={username:'acme',passw:'acme'};
ajaxText(url,jsonData,getMsg);
function getMsg(msg)
{
 //do something
}

為了方便使用,可以把三個(gè)函數(shù)合并.合并后的函數(shù)如下:

/**
 * @function 利用ajax動(dòng)態(tài)交換數(shù)據(jù)
 * @param url  要提交請(qǐng)求的頁(yè)面
 * @param jsonData 要提交的數(shù)據(jù),利用Json傳遞
 * @param getMsg 這個(gè)函數(shù)可以獲取到處理后的數(shù)據(jù)
 * @param type  接受的數(shù)據(jù)類(lèi)型,text/xml/json
 * @param tagName type = xml 的時(shí)候這個(gè)參數(shù)設(shè)置為要獲取的文本的標(biāo)簽名
 * @return 無(wú)
 */
function ajax(url,jsonData,getMsg,type,tagName)
{
  //創(chuàng)建Ajax對(duì)象,ActiveXObject兼容IE5,6
  var oAjax = window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");
  //打開(kāi)請(qǐng)求
  oAjax.open('POST',url,true);//方法,URL,異步傳輸
  //發(fā)送請(qǐng)求
  var data = '';
  for(var d in jsonData)  //拼裝數(shù)據(jù)
    data += (d + '=' +jsonData[d]+'&');
  oAjax.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  oAjax.send(data);
  //接收返回,當(dāng)服務(wù)器有東西返回時(shí)觸發(fā)
  oAjax.onreadystatechange = function ()
  {
    if(oAjax.readyState == 4 && oAjax.status == 200)
    {
      if(type == 'text')
      {
        if(getMsg) getMsg(oAjax.responseText);
      }
      else if(type == 'json')
      {
        var json = eval('('+oAjax.responseText+')');//把傳回來(lái)的字符串解析成json對(duì)象
        if(getMsg)getMsg(json);
      }
      else if(type == 'xml')
      {
        var oXml = oAjax.responseXML; //返回的是一個(gè)XML DOM對(duì)象
        var oTag = oXml.getElementsByTagName(tagName);
        var tagValue = oTag[0].childNodes[0].nodeValue;
        if(getMsg)getMsg(tagValue);
      }

    }
  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論