`

练习:通过AJAX跨域上传文件

 
阅读更多

这里包含两个知识点,通过AJAX来上传文件+跨域问题

 

跨域问题的解决方案:W3C标准CORS(Cross-Origin Resource Sharing)规范,在服务器端使用filter来设置response头的跨域相关属性。

 

Chrome在发起AJAX请求时,会检查请求是否跨域,如果是,它会先发起一个OPTIONS类型的请求来向服务器查询跨域权限。比如你的AJAX是一个跨域的POST请求,那么在真正向服务器发送该POST请求之前,会先触发一个OPTIONS请求,该请求的头里包含以下属性:

 

Access-Control-Request-Headers:accept, content-type
Access-Control-Request-Method:POST

  

如果服务器返回的response头里包含类似这样的信息,那么就表示服务器接受这个跨域请求:

Allow:GET, HEAD, POST, TRACE, OPTIONS

  

然后真正的POST跨域请求才会被发送。

服务器端代码使用的是第三方的cors-filter-1.3.2.jar,java-property-utils-1.6.jar

 

通过AJAX来发起上传文件的POST请求

HTML代码

<form enctype="multipart/form-data" >
    <input name="file" type="file" />
    <input type="button" value="Upload" />
</form>

JS代码以jQuery为例,在调用$.ajax()方法时,传入一个FormData对象,并且将contentType和processData设为false

var formData = new FormData($('form')[0]);
$.ajax({
    url: '你的跨域URL',  //Server script to process data
    type: 'POST',
    //Ajax events
    //beforeSend: beforeSendHandler,
    //success: completeHandler,
    //error: errorHandler,
    // Form data
    data: formData,
    //Options to tell jQuery not to process data or worry about content-type.
    cache: false,
    contentType: false,
    processData: false
});

 

测试在Chrome 35和Firefox 30上通过。

 

后续问题(待更新):1. IE8不支持FormData,如何实现? 2. 服务器端代码替换成Apache标准的代码。3. 跨域携带cookie(设置withCredentials?)4. 服务器端开放所有对所有域的AJAX请求,安全性问题?

分享到:
评论

相关推荐

    用ajax+servlet做的练习

    10. **进度指示**:对于大文件传输或长时间运行的任务,开发者可能会添加进度指示器,通过XMLHttpRequest的progress事件跟踪上传或下载进度。 通过这个练习,开发者不仅锻炼了JavaScript和服务器端编程能力,还了解...

    ajax提交file文件

    这个元素的`id`属性将用于在JavaScript中获取用户选择的文件: ```html ()"&gt;上传 ``` 然后,在JavaScript中,我们可以监听按钮的点击事件,并使用`FormData`对象来构建提交的数据。`FormData`对象允许我们将...

    AJAX非常好的例子(涵盖面广,各种特效)

    7. **文件上传**: 通过AJAX,可以实现文件的异步上传,显示进度条,甚至预览上传的图片或文档。 8. **错误处理**: AJAX请求失败时,可以捕获错误并给出用户友好的提示,提升用户体验。 9. **跨域请求**: AJAX支持...

    关于ajax练习的入门级实例

    **Ajax(Asynchronous JavaScript and XML)是...总结来说,这个"关于ajax练习的入门级实例"会涵盖上述基本知识点,通过实际操作,初学者可以快速掌握如何使用Ajax实现页面的无刷新交互,为后续的Web开发打下坚实基础。

    mini-upload-form

    该应用的核心组成部分包括以下文件: 1. **assets**:这是一个包含CSS样式表和JavaScript脚本的目录。CSS文件用于定义界面的样式,如按钮、输入框等元素的外观;JavaScript文件则包含了处理AJAX请求和反馈的逻辑,...

    ajax学习笔记代码

    4. **异步加载与进度条**:实现文件上传时的进度条功能,展示Ajax请求的进度。 通过以上四天的学习,你将能够熟练掌握Ajax的基本原理和应用,从而在实际项目中提高Web应用的性能和用户体验。在MyEclipse环境下,你...

    AJAXpj.rar

    AJAXpj.rar是一个压缩包文件,它包含了与AJAX(Asynchronous JavaScript and XML)相关的项目或练习,适合学习和深入理解AJAX技术。AJAX是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术,极大地提高...

    疯狂Ajax讲义-17章全代码(货真价实,不信你可以举报)

    6. XHR2与Fetch API:现代浏览器已经支持了XHR2,提供了更多的特性,如支持文件上传、跨域请求等。Fetch API是更现代的替代方案,提供了Promise接口。这部分代码可能展示了如何利用这些新特性。 7. JSONP和CORS:...

    springCloud.rar(私聊博主要密码)

    + mybatis-plus + 令牌token + 全局异常管理 + 统一返回数据拦截 + 自定义异常 + 处理ajax跨域请求 + Feign + 熔断机制 + eureka + 单元测试(controller、service、mapper层) + redis集群集成练习 + redis操作练习 ...

    php开发培训最全学习大纲.docx

    4. MySQL企业练习:通过实际案例提升数据库操作能力。 5. InnoDB与MyISAM的区别:理解两种存储引擎的优缺点,如事务支持、行级锁定等。 三、PHP操作数据库 1. CRUD操作:Create(创建)、Read(读取)、Update...

    Ajax-Exercises

    2. JavaScript文件:实现了Ajax请求的逻辑,可能使用了jQuery、fetch API或者原生XMLHttpRequest对象。 3. JSON文件:可能作为模拟服务器响应的数据源,供Ajax请求获取和解析。 4. CSS文件:用于美化和布局HTML页面...

    php-ajax-dischi

    9. **文件上传/下载**:可能与PHP的文件系统操作相关,如上传文件到服务器或下载服务器上的文件。 这个项目可能是为了帮助学生或开发者掌握如何使用PHP处理服务器端逻辑,以及如何通过AJAX实现页面的无刷新交互。...

    基于Javascript实现的将本地题库(Excel)表格中的内容部署到网页上类似于刷题软件

    用户可以通过上传文件选择器将Excel文件导入到网页。 2. **数据处理**:`SheetJS` 或 `xlsx` 库可以将Excel文件转换为JSON格式,便于JavaScript操作。我们需要解析这些数据,包括题目、选项、答案等,并存储在合适...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    Django获取多个数据以及文件上传 Django的CBV和FBV Django模板语言循环字典 Django基于正则表达式的URL Django对应的路由名称 Django路由分发 DjangoORM基本创建基本类型以及生成数据库结构 DjangoORM使用mysql注意 ...

    《JavaWeb程序设计案例教程》_课后习题---(复习3).rar

    8. **文件上传与下载**:利用Servlet和JSP实现文件的上传和下载功能,理解文件流的处理。 9. **AJAX(Asynchronous JavaScript and XML)**:结合JavaScript和XML实现异步交互,提升用户界面的响应速度。 10. **...

    网页版聊天程序--网络程序设计课程大作业

    文件发送接收可能利用File API来读取、处理用户选取的文件,并通过WebSocket将文件数据分块发送到服务器。同时,前端会显示进度条反馈,这可能使用了Promise或async/await来控制异步操作,实现断点续传功能意味着...

    codewars-katas:我对http上的一些kata的解析

    9. **FormData**:在发送表单数据或上传文件时,可以使用FormData对象。它可以将键值对或文件对象包装成一个数据块,方便通过HTTP发送。 10. **响应式编程**:现代Web应用经常使用RxJS或其它响应式库,通过流处理...

    python入门到高级全栈工程师培训 第3期 附课件代码

    01 selctors实现文件上传与下载 02 html的介绍 03 html文档树的概念 04 meta标签以及一些基本标签 05 img标签和列表标签 06 form表单之input标签 07 通过form向server端发送数据 08 form表单之select标签 09 table...

    《ASP.NET程序设计实用教程》

    除此之外,本书还提供了大量实例源代码,这些代码覆盖了常见的ASP.NET应用场景,包括用户注册、登录验证、文件上传下载、邮件发送等。通过这些实例,读者可以动手实践,巩固理论知识,提升实际开发能力。 配合PPT...

    codeup-web-exercises

    - **FormData**: 在发送表单数据或上传文件时,`FormData`对象非常有用。它可以将表单数据封装成适合HTTP请求的格式。 - **RESTful API通信**: REST(Representational State Transfer)是一种常见的Web服务设计...

Global site tag (gtag.js) - Google Analytics