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);
}
}
}
分享到:
相关推荐
对于非IE浏览器(如Chrome、Firefox等),可以使用`FileReader` API,它提供了一个异步的方式来读取文件内容。`FileReader`的`readAsBinaryString`方法用于将文件读取为二进制字符串。需要注意的是,`...
本文将主要探讨Extjs框架下实现Ajax同步POST请求时参数的发送方式。 首先,了解Extjs框架中的Ajax请求机制是非常重要的。Extjs提供了一个便捷的Ajax调用方式,通过Ext.Ajax.request方法,开发者可以非常方便地发起...
5. **跨设备同步**:如果用户在多台设备上使用 Firefox 并且同步浏览器数据,Autofill Forms 的数据也可以同步,提供一致的体验。 6. **兼容性**:这款插件与大多数网页和表单格式兼容,包括 HTML、JavaScript 和 ...
- **跨浏览器支持:** 随后,Mozilla(包括Firefox)、Safari、Opera等现代浏览器也实现了对XMLHttpRequest的支持,尽管它们采用了不同的实现方式。 - **Mozilla:** 使用XMLHttpRequest类。 - **Safari:** 基于...
在标签中提到的“源码”和“工具”,可能是指在解决Ajax中文问题时,需要查看和分析服务器端的源代码,以及可能使用到的调试工具,如Chrome开发者工具、Firefox的Web Console等,这些工具可以帮助我们跟踪网络请求,...
在AJAX通信中,客户端通常指的是浏览器,它可以是Firefox、Chrome等任何能够发送HTTP请求的浏览器。但客户端不局限于浏览器,任何能够发送HTTP请求的设备或程序都可以作为客户端。当用户在Web表单中输入数据时,...
现代浏览器都提供了开发者工具,如Chrome DevTools和Firefox Developer Tools,它们包含了用于检查网络请求、跟踪代码执行路径和监控变量变化的强大工具。熟练使用这些工具可以帮助你快速定位和解决问题。 11. **...
为了确保广泛的应用,Ajax_Calendar 控件需要兼容多种浏览器,包括Chrome、Firefox、Safari、Edge以及Internet Explorer等。开发者需要考虑不同浏览器的JavaScript实现差异,可能需要用到polyfills或特定的浏览器...
在Firefox中,JavaScript可以用来操作XML DOM。以下是一些关键步骤和概念: 1. **创建XML对象**:首先,你需要创建一个XMLDocument对象来加载XML数据。这可以通过`XMLHttpRequest`对象或`DOMParser`对象实现。 - ...
微软的Internet Explorer曾一度占据主导地位,而随着技术的更新迭代,Mozilla Firefox、Apple Safari和Opera等其他浏览器逐步兴起,形成今天的多元浏览器市场。了解这些历史有助于我们理解浏览器兼容性和Web标准的...
- **技术演进**:随着`XMLHttpRequest`对象的支持逐渐扩展到了更多浏览器(如Firefox、Safari等),AJAX技术开始流行起来。 - **现代应用**:如今,AJAX已成为构建高度互动式Web应用程序的标准方法之一,被广泛应用...
1. **创建XMLHttpRequest对象**:这是Ajax的基础,所有现代浏览器(包括IE7+、Firefox、Chrome、Safari、Opera)都内置了这个对象。 2. **初始化连接**:调用XMLHttpRequest对象的`open()`方法,指定请求类型(GET、...
- Firebug:Firefox的开发工具插件,功能类似DevTools。 2. **错误处理:** - 设置onerror事件处理器来捕获AJAX请求中的错误。 - 使用try...catch语句处理异步操作中的异常。 - 分析HTTP状态码,判断请求失败的...
4. **兼容性**:确保框架能良好运行在目标浏览器上,包括IE、Firefox、Chrome、Safari等。 5. **可扩展性与模块化**:好的框架应允许自定义和扩展,适应项目需求变化。 三、常见Ajax框架对比 1. **jQuery**:经典...
开发者需要确保代码能在主流浏览器(如Chrome、Firefox、Safari、Edge等)上正常运行。此外,安全性也是一个关键因素,书签数据可能包含敏感信息,因此在传输和存储过程中应采用加密措施,防止数据泄露。 总结来说...
在所有现代浏览器中,如IE7+、Firefox、Chrome、Safari和Opera,都内置了`XMLHttpRequest`对象。在老版本的IE(IE5和IE6)中,需要使用`ActiveXObject`来创建XMLHttpRequest。以下是一段兼容性检查的代码: ```...
3. **兼容性:** 支持主流的浏览器,包括IE6+、Firefox、Chrome、Safari等,确保广泛的应用场景。 4. **易用性:** 提供丰富的API和简单直观的API调用方式,降低开发难度,提高开发效率。 5. **灵活性:** 可以与...
AJAXRequest 是一个专为简化AJAX应用程序开发而设计的轻量级框架,适用于Firefox、IE、Opera、Safari等主流浏览器。该库旨在减少开发过程中重复的代码编写,提高开发效率。在使用过程中,如果遇到问题或有建设性的...
- **Firefox** 及其他非IE浏览器使用 `XMLHttpRequest` 对象创建。 ```javascript var xhr = new XMLHttpRequest(); ``` - **IE** 使用 `ActiveXObject` 创建。 ```javascript var xhr = new ActiveXObject(...
// 支持W3C标准的浏览器,如Firefox、Opera 8.0+、Safari xmlHttp = new XMLHttpRequest(); } catch (e) { // 针对Internet Explorer try { // IE 5.5+ 支持Msxml2.XMLHTTP对象 xmlHttp = new ActiveXObject...