在Firefox中通过AJAX跨域访问Web资源

简介:
一、解决在firefox 中无法跨域访问的问题
AJAX 从本质上讲就是命名用XMLHttpRequest 组件来向服务端发送HTTP 请求,请接收相应信息。至于成功接收到响应信息后的操作,就和普通的Web 客户端程序类似了(一般用DOM 将信息加到HTML 组件中)。但问题就发生在了XMLHttpRequest 组件上。虽然在大多数浏览器中(包括IE Firefox 等)都叫这个名子。使用方法也类似。但在进行某些操作时却有不同的效果。
就拿跨域访问的问题来说。让我们先看看如下的html 中的javascript 代码:
test.html

< html >
    
< head >
        
< title ></ title >
        
< meta  http-equiv ="Content-Type"  content ="text/html; charset=UTF-8" >
< script  type ="text/javascript" >   

//  获得IE和firefox浏览器中的XMLHttpRequest对象
function  getXMLHTTPRequest()
{
    var  myRequest  =   null ;
    if (window.XMLHttpRequest)    //  firefox
    {        
        myRequest 
=   new  XMLHttpRequest(); 
    }
    else   if ( typeof  ActiveXObject  !=   " #ff0000 " )   //  IE
    {              
        myRequest 
=   new  ActiveXObject( " Microsoft.XMLHTTP " );
    }          
    return  myRequest;          
}

var  myRequest;
function  onReadyState()    //  XMLHttpRequest处理异步访问状态时的事件
{
    if (myRequest.readyState  ==   4 )    //  4表示成功获得相应信息
    {              
        var  msg  =  document.getElementById( " msg " );
        msg.value 
=  myRequest.responseText             
    }
}
function  getServiceText()
{     
    myRequest 
=  getXMLHTTPRequest();
    if (myRequest)
    {         
        myRequest.onreadystatechange 
=  onReadyState;      
        try  
        {
            myRequest.open( 
" post " " http://www.blogjava.net " true );
        }
        catch (exception)
        {
            
var  msg  =  document.getElementById( " msg " );
            msg.value 
=  exception;  
         } 
         myRequest.send(
" test " );
    }         
}

</ script >
    
</ head >
    
< body >
        
< input  id ="msg"  type ="text"   />
        
< input  type ="button"  value ="信息"  onclick ="getServiceText()"   />
    
</ body >
</ html >
如果在IE 中访问上面的html 文件,url 如下:
http://localhost:8080/test.html
会弹出一个对话框,大概意思是说您已经跨域访问了,可能存在风险,是否继续。如果继续执行的话,仍然可以访问http://www.blogjava.net 。但是在firefox 中却更本无法访问其它域的url ,并且会抛出“调用方法  XMLHttpRequest.open  时权限不足”异常。解决的方法一般有两种,一种是修改firefox 的设置,在firefox 的地址栏中输入“about:config ”,并找到signed.applets.codebase_principal_support ,将其设为true 。如图1 所示。


                                                       
                                         图1
但这种方法经过实现,仍然无法访问其他域的 url ,不知是不是新版的 firefox 把这个给屏蔽了。就算这种方法可行,也尽量不使用这种需要配置 firefox 的方法,而要使用编程的方法,在访问其它域之前,可以使用如下代码打开权限:

try  

    netscape.security.PrivilegeManager.enablePrivilege(
" UniversalBrowserRead " ); 
}
catch  (exception)

    alert(exception); 
}

要注意的是,上面的代码只能用在 firefox 中,因此,要将其放到只有 firefox 才能执行到的代码块中,如在下面的块中:

if (window.XMLHttpRequest)    //  firefox
{        
    
try  
    { 
        netscape.security.PrivilegeManager.enablePrivilege(
" UniversalBrowserRead " ); 
    }
    
catch  (exception)
    { 
        alert(exception); 
    }
}

     不能将上面的代码放到getXMLHTTPRequest 中,应放到getServiceText 中。
注:如果test.html 在通过web 服务器访问,而是按着访问本地文件时访问test.html 时,在IE 中不会出现上述的提示对话框,而是直接就可以访问其他的域。
二、其他的跨浏览器问题
 
不同浏览器的XMLHttpRequest 虽然接口一样,但在不同浏览器中调用XMLHttpRequest 的方法和属性的效果不同。如send 方法,在IE 中可以不传参数,如myRequest.send(); 仍然可以正常工作,而在firefox 中,必须为send 方法传一个参数,也就是说,在firefox send 方法参数没有默认值,必须为其赋值。为了通用起见,建议所有的send 方法都为其赋一个参数值,哪怕是空串。
除了send 方法,responseText 属性也是一样,在IE 中,responseText 返回了整个web 资源的内容,而在firefox 中只返回web 资源的第一行。







 本文转自 androidguy 51CTO博客,原文链接:http://blog.51cto.com/androidguy/215351,如需转载请自行联系原作者


相关文章
|
2月前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
60 3
|
2月前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
58 1
|
2月前
【Azure App Service】PowerShell脚本批量添加IP地址到Web App允许访问IP列表中
Web App取消公网访问后,只允许特定IP能访问Web App。需要写一下段PowerShell脚本,批量添加IP到Web App的允许访问IP列表里!
|
3月前
|
前端开发 JavaScript API
惊呆了!学会AJAX与Fetch API,你的Python Web项目瞬间高大上!
在Web开发领域,AJAX与Fetch API是提升交互体验的关键技术。AJAX(Asynchronous JavaScript and XML)作为异步通信的先驱,通过XMLHttpRequest对象实现了局部页面更新,提升了应用流畅度。Fetch API则以更现代、简洁的方式处理HTTP请求,基于Promises提供了丰富的功能。当与Python Web框架(如Django、Flask)结合时,这两者能显著增强应用的响应速度和用户体验,使项目更加高效、高大上。
59 2
|
3月前
|
前端开发 API 开发者
从零到精通,AJAX与Fetch API让你的Python Web前后端交互无所不能!
从零到精通,AJAX与Fetch API让你的Python Web前后端交互无所不能!
51 3
|
3月前
|
前端开发 API 数据格式
颠覆传统!AJAX、Fetch API与Python后端,开启Web开发新篇章!
在Web开发领域,技术的快速迭代推动着应用不断进化。传统前后端交互方式已无法满足现代Web应用对高效、实时性和用户体验的需求。AJAX作为异步通信的先驱,使页面无需刷新即可更新部分内容,显著提升用户体验;尽管XML曾是其主要数据格式,但如今JSON已成为主流。Fetch API则以其简洁、灵活的特点成为AJAX的现代替代品,基于Promises的异步请求让开发更加高效。与此同时,Python后端凭借高效稳定和丰富的库支持,成为众多开发者的首选,无论是轻量级的Flask还是全功能的Django,都能为Web应用提供强大的支撑。
48 0
|
3月前
|
XML 前端开发 API
惊艳全场的秘诀!AJAX、Fetch API与Python后端,打造令人惊叹的Web应用!
惊艳全场的秘诀!AJAX、Fetch API与Python后端,打造令人惊叹的Web应用!
39 0
|
5月前
|
前端开发 Java UED
告别页面刷新时代:Struts 2 Ajax技术揭秘,轻松实现动态加载,Web应用焕然一新!
【8月更文挑战第31天】在Web应用开发中,用户体验至关重要。为减少页面刷新带来的不适,Ajax技术应运而生。Struts 2作为流行的Java EE框架,通过内置的Ajax支持简化了无刷新页面动态加载的实现。本文通过对比传统请求响应模式,展示了Struts 2如何轻松实现Ajax功能,提升了用户体验和开发效率,并灵活地实现了数据交换。然而,使用Ajax时还需注意SEO和跨域请求等局限性。
46 0
|
5月前
|
Java 数据库连接 数据库
强强联手!JSF 与 Hibernate 打造高效数据访问层,让你的应用如虎添翼,性能飙升!
【8月更文挑战第31天】本文通过具体示例详细介绍了如何在 JavaServer Faces (JSF) 应用程序中集成 Hibernate,实现数据访问层的最佳实践。首先,创建一个 JSF 项目并在 Eclipse 中配置支持 JSF 的服务器版本。接着,添加 JSF 和 Hibernate 依赖,并配置数据库连接池和 Hibernate 配置文件。然后,定义实体类 `User` 和 DAO 类 `UserDAO` 处理数据库操作。
68 0
|
XML 前端开发 JavaScript
什么是Ajax和jquery
什么是Ajax和jquery
91 0