firefox中的ajax同步传输
以前很少使用到ajax同步传输,也没有注意到其在firefox中的表现!前两周因项目需要,使用到了ajax 同步传输,但在测试中发现一般使用的程序firefox中的ajax同步传输无法执行。相同代码,异步状态在firefox下正常,但无法实现需要的功能!
<script language="javascript" type="text/javascript">
function GetData()
{
var result;
var xmlhttp = create_XML_object();
xmlhttp.open("POST", "/test.aspx", false);
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4)
{
result = xmlhttp.responseText;
}
}
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send(null);
return result;
}
</script>
以上基础的ajax调用代码,ajax异步传输在所有浏览器正常,ajax同步传输在IE等其他浏览器中正常,在firefox中的ajax同步传输不会起作用!
究其原因,就是firefox经常打起的标准大旗(可害苦了不少人),firefox中对ajax同步请求是不调用状态改变函数onreadystatechange的,firefox中的ajax同步传输则在xmlhttp.send(null)之后直接使用xmlhttp.responseText便可获取ajax同步传输返回值!那么我们在JS中就先判断浏览器类型,然后调用不同的代码实现ajax同步传输,代码如下:
<script language="javascript" type="text/javascript">
function getOs()
{
var OsObject = "";
if(navigator.userAgent.indexOf("MSIE")>0) {
return "MSIE"; //IE浏览器
}
if(isFirefox=navigator.userAgent.indexOf("Firefox")>0){
return "Firefox"; //Firefox浏览器
}
if(isSafari=navigator.userAgent.indexOf("Safari")>0) {
return "Safari"; //Safan浏览器
}
if(isCamino=navigator.userAgent.indexOf("Camino")>0){
return "Camino"; //Camino浏览器
}
if(isMozilla=navigator.userAgent.indexOf("Gecko/")>0){
return "Gecko"; //Gecko浏览器
}
}
function GetData()
{
var result;
var xmlhttp = create_XML_object();
xmlhttp.open("POST", "/test.aspx", false);
var btype=getOs();
if(btype!="Firefox")
{
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4)
{
result = xmlhttp.responseText;
}
}
}
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send(null);
if(btype=="Firefox")
{
result = xmlhttp.responseText;
}
return result;
}
</script>
大功告成,实现在firefox中的ajax同步传输!
==================================================
//new ActiveXObject("Microsoft.XMLHTTP") 这样的ActiveX对象调用的其实是1.0版本(最老的)。
//而更多见的 new ActiveXObject("Msxml2.XMLHTTP") 调用的是2.6或3.0版本(如果客户端装有较新的,则调用的是较新的,查看注册表中 HKEY_CLASSES_ROOT\Msxml2.XMLHTTP\CurVer 项目的值就可以具体知道,如果是3.0版本的话,该值为"Msxml2.XMLHTTP.3.0"。)
var xmlHttp=false;
try{
xmlHttp=new ActiveXobject("Msxml2.XMLHTTP");
}catch(e){
try{
xmlHttp=new ActiveXobject("Microsoft.XMLHTTP");
}catch(e2){
xmlHttp=false;
}
}
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
}
function onIdcChanged(idcid)
{
var requrl = "${ctx}/block/idc/block.do?method=getRoom&parentInventoryId="+idcid;
xmlHttp.open("POST",requrl, true);
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.onreadystatechange = update;
xmlHttp.send(null);//为支持火狐加null
}
function update(){
if(xmlHttp.readyState == 4) {
try{
var retXml = xmlHttp.responseText;
//alert(retXml);
//parase the xml,and then update the related box
if( retXml == "false" ){
//can not get the customer info
alert(retXml);
}else{
//get the html element
var room = document.getElementById("room");
clearSelect(room,true);
//get the xml data
var xmlDoc;
if (window.ActiveXObject)
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=true;
xmlDoc.loadXML(retXml);
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
{
var oParser=new DOMParser();
xmlDoc=oParser.parseFromString(retXml,"text/xml");
}
else
{
alert('你的浏览器不支持这个脚本!');
}
var items = xmlDoc.getElementsByTagName("rooms");
alert(items[1].getAttribute("name"));
for(var i=0;i<items.length;i++){
var id = items[i].getAttribute("id");
var name = items[i].getAttribute("name");
room.options.add(new Option(name,id));
}
}
}catch(e){
//alert(e);
}
}
}
分享到:
相关推荐
ajax代码不是很好调试,不过使用FireFox和debug插件却可以很容易来调试的。
使用Firefox火狐书签同步功能 方便异地同步书签数据.docx
Firefox 52.0.2 渗透便携版 90SEC beta8 含多个文件 Firefox 52.0.2 渗透便携版 90SEC beta8 Firefox 52.0.2 渗透便携版 90SEC beta8 Firefox 52.0.2 渗透便携版 90SEC beta8 Firefox 52.0.2 渗透便携版 90SEC beta8...
Firefox填写表单扩展 安装方法很简单,直接拖拽到火狐浏览器窗口中然后根据提示操作即可。 随时关注最新版: http://code.google.com/p/ffextension/downloads 火狐官方下载地址: ...
Firefox 29 - 完整包,下载后直接就能用,新手或懒得折腾的直接下载这个就行了 全新的重要自定义模式可轻松个性化您的Web体验,以访问您最常用的功能 Firefox的右上角有一个易于访问的新菜单,其中包含流行的...
ScrapBook for FireFox 1.5.14 ScrapBook for FireFox 1.3.7 直接用FIREFOX打开 XPI 文件即可
Ajax应用程式中经常操作DOM Tree,您可以直接使用DOM Inspector来观察DOM Tree中对应於网页画面的哪个元件,执行Mozilla Firefox官方中文版的「工具/DOM观察器」,可以显示DOM Inspector视窗,在网址列输入网址,并...
受影响的包括uBlock Origin、AdGuard AdBlocker、AdBlock For Firefox、AdNauseam等广告拦截扩展。只有科学上网,去AdGuard或AdGuard AdBlocker英文网站主页安装这个插件。你也可以尝试下载这个离线安装插件,解压缩...
火狐浏览器 59 版本,firefox 59版本,直接点击安装。
ajax代码不是很好调试,不过使用FireFox和debug插件却可以很容易来调试的。其中有FireFox Bug 和相关使用文档
Firefox使用教程:让多个浏览器收藏夹同步.docx
Mozilla Firefox,中文俗称“火狐”(正式缩写为Fx或fx,非正式缩写为MF),是一个自由及开放源代码的网页浏览器,使用Gecko排版引擎,支持多种操作系统,如Windows、Mac OS X及GNU/Linux等。该浏览器提供了两种版本...
firefox_52.3.0esr+build2-0kord1_arm64.deb, firefox_52.3.0esr+build2-0kord1_armhf.deb, firefox_75.0+build3-0kylin1_amd64.deb, firefox_75.0+build3-0kylin1_arm64.deb, firefox_75.0+build3-0kylin1_...
firefox52.0.2最新渗透便携版,打开解压就可以使用,包含了几乎所有的渗透测试插件 Firefox是一一个出自Mozilla组织的流行的Web浏览器。Firefox的流行并不仅仅是因为它是一-个好的浏览器,而且它能够支持插件进而...
解压后可用,资源全名:Firefox Setup 45.0.2.exe
火狐firefox adblock xpi插件,adblock for macOS firefox,解决火狐浏览器安装adblock显示此页面在您的地区不可用问题,解压拖动到火狐浏览器即可安装,完美解决无法从插件市场安装的问题
自带的火狐浏览器太老了,通过该浏览器,很多功能都不能实现,实际上不是bug,只是该更新版本了,建议安装最新的火狐浏览器。条件限制,有时只能离线安装,可以下载此离线文件进行安装。..../firefox
解压后可用,资源全名:Firefox Setup 52.9.0esr.exe
资源全名:Firefox 52.9.0esr.dmg
资源全名:Firefox 52.1.1esr.dmg