`
angie_hawk7
  • 浏览: 48151 次
  • 性别: Icon_minigender_1
  • 来自: 乌托邦
社区版块
存档分类
最新评论

firefox中的ajax同步传输

阅读更多
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);
   }
}
}
       

分享到:
评论
1 楼 malson 2012-08-04  
非常感谢,我也遇到这个问题,帮了大忙

相关推荐

    JavaScript读二进制文件并用ajax传输二进制流的方法

    对于非IE浏览器(如Chrome、Firefox等),可以使用`FileReader` API,它提供了一个异步的方式来读取文件内容。`FileReader`的`readAsBinaryString`方法用于将文件读取为二进制字符串。需要注意的是,`...

    Extjs ajax同步请求时post方式参数发送方式

    本文将主要探讨Extjs框架下实现Ajax同步POST请求时参数的发送方式。 首先,了解Extjs框架中的Ajax请求机制是非常重要的。Extjs提供了一个便捷的Ajax调用方式,通过Ext.Ajax.request方法,开发者可以非常方便地发起...

    FireFox 插件 Autofill Forms 0.9.6.1 完全汉化版

    5. **跨设备同步**:如果用户在多台设备上使用 Firefox 并且同步浏览器数据,Autofill Forms 的数据也可以同步,提供一致的体验。 6. **兼容性**:这款插件与大多数网页和表单格式兼容,包括 HTML、JavaScript 和 ...

    Ajax程序设计入门

    - **跨浏览器支持:** 随后,Mozilla(包括Firefox)、Safari、Opera等现代浏览器也实现了对XMLHttpRequest的支持,尽管它们采用了不同的实现方式。 - **Mozilla:** 使用XMLHttpRequest类。 - **Safari:** 基于...

    Ajax中文问题

    在标签中提到的“源码”和“工具”,可能是指在解决Ajax中文问题时,需要查看和分析服务器端的源代码,以及可能使用到的调试工具,如Chrome开发者工具、Firefox的Web Console等,这些工具可以帮助我们跟踪网络请求,...

    Ajax20180427.pdf

    在AJAX通信中,客户端通常指的是浏览器,它可以是Firefox、Chrome等任何能够发送HTTP请求的浏览器。但客户端不局限于浏览器,任何能够发送HTTP请求的设备或程序都可以作为客户端。当用户在Web表单中输入数据时,...

    AJAX FAQ for the Java Developer.doc

    现代浏览器都提供了开发者工具,如Chrome DevTools和Firefox Developer Tools,它们包含了用于检查网络请求、跟踪代码执行路径和监控变量变化的强大工具。熟练使用这些工具可以帮助你快速定位和解决问题。 11. **...

    ajax_calendar

    为了确保广泛的应用,Ajax_Calendar 控件需要兼容多种浏览器,包括Chrome、Firefox、Safari、Edge以及Internet Explorer等。开发者需要考虑不同浏览器的JavaScript实现差异,可能需要用到polyfills或特定的浏览器...

    FireFox下用XML DOM解析XML文档(ASP.NET Web)

    在Firefox中,JavaScript可以用来操作XML DOM。以下是一些关键步骤和概念: 1. **创建XML对象**:首先,你需要创建一个XMLDocument对象来加载XML数据。这可以通过`XMLHttpRequest`对象或`DOMParser`对象实现。 - ...

    ajax基础教程

    微软的Internet Explorer曾一度占据主导地位,而随着技术的更新迭代,Mozilla Firefox、Apple Safari和Opera等其他浏览器逐步兴起,形成今天的多元浏览器市场。了解这些历史有助于我们理解浏览器兼容性和Web标准的...

    SUN的《AJAX与J2EE》全文译了

    - **技术演进**:随着`XMLHttpRequest`对象的支持逐渐扩展到了更多浏览器(如Firefox、Safari等),AJAX技术开始流行起来。 - **现代应用**:如今,AJAX已成为构建高度互动式Web应用程序的标准方法之一,被广泛应用...

    有关于ajax的使用及相关实例

    1. **创建XMLHttpRequest对象**:这是Ajax的基础,所有现代浏览器(包括IE7+、Firefox、Chrome、Safari、Opera)都内置了这个对象。 2. **初始化连接**:调用XMLHttpRequest对象的`open()`方法,指定请求类型(GET、...

    100道ajax面试题

    - Firebug:Firefox的开发工具插件,功能类似DevTools。 2. **错误处理:** - 设置onerror事件处理器来捕获AJAX请求中的错误。 - 使用try...catch语句处理异步操作中的异常。 - 分析HTTP状态码,判断请求失败的...

    AJAX_Framework_Assessment.zip_Framework

    4. **兼容性**:确保框架能良好运行在目标浏览器上,包括IE、Firefox、Chrome、Safari等。 5. **可扩展性与模块化**:好的框架应允许自定义和扩展,适应项目需求变化。 三、常见Ajax框架对比 1. **jQuery**:经典...

    JavaScript_在浏览器和设备之间私下同步书签.zip

    开发者需要确保代码能在主流浏览器(如Chrome、Firefox、Safari、Edge等)上正常运行。此外,安全性也是一个关键因素,书签数据可能包含敏感信息,因此在传输和存储过程中应采用加密措施,防止数据泄露。 总结来说...

    12JavaScript异步Ajax与json总结.docx

    在所有现代浏览器中,如IE7+、Firefox、Chrome、Safari和Opera,都内置了`XMLHttpRequest`对象。在老版本的IE(IE5和IE6)中,需要使用`ActiveXObject`来创建XMLHttpRequest。以下是一段兼容性检查的代码: ```...

    基于Java的国产Ajax框架 Buffalo.zip

    3. **兼容性:** 支持主流的浏览器,包括IE6+、Firefox、Chrome、Safari等,确保广泛的应用场景。 4. **易用性:** 提供丰富的API和简单直观的API调用方式,降低开发难度,提高开发效率。 5. **灵活性:** 可以与...

    javascript ajax类AJAXRequest2007-12-31 更新

    AJAXRequest 是一个专为简化AJAX应用程序开发而设计的轻量级框架,适用于Firefox、IE、Opera、Safari等主流浏览器。该库旨在减少开发过程中重复的代码编写,提高开发效率。在使用过程中,如果遇到问题或有建设性的...

    Ajax技术课件,保密资料下载

    - **Firefox** 及其他非IE浏览器使用 `XMLHttpRequest` 对象创建。 ```javascript var xhr = new XMLHttpRequest(); ``` - **IE** 使用 `ActiveXObject` 创建。 ```javascript var xhr = new ActiveXObject(...

    AJAX在不同浏览器中XMLHttpRequest对象的生成示例

    // 支持W3C标准的浏览器,如Firefox、Opera 8.0+、Safari xmlHttp = new XMLHttpRequest(); } catch (e) { // 针对Internet Explorer try { // IE 5.5+ 支持Msxml2.XMLHTTP对象 xmlHttp = new ActiveXObject...

Global site tag (gtag.js) - Google Analytics