最近用jquery-file-upload插件做上传文件的功能。
其他的功能都齐了,但是遇到一个问题,后台对于每一次请求都要验证一下是不是登录用户发过来的,根据就是http 请求头中的两项 username 和 password,对于应用前端的其他功能,每一次请求中都会在headers中设置这两项,angular js提供了这个功能,代码如下:
setAuthHeaders: function ($http, email, password) { $http.defaults.headers.common['username'] = email; $http.defaults.headers.common['password'] = password; },
但是,现在是在jquery file upload这个插件里,它有自己的一套http通信机制,所以很难在javascript中动手脚添加前面所说的那两项。这个问题折腾了一天多还是没有解决。
周四,在翻看jquery.fileupload.js的源文件时,无意中看到一个方法,叫做 _initXHRData ,从名字看似乎是在初始化一些准备提交的数据,然后这个方法体里面有几行代码引起了我的注意:
if (options.contentRange) { options.headers['Content-Range'] = options.contentRange; }
咦!这不就是在设置 headers吗?!于是乎,在这一段的上面自己加了两行:
//For Test--------------- options.headers['username'] = fs.common.getSignedUser().email; options.headers['password'] = fs.common.getSignedUser().password; //----------------------- if (options.contentRange) { options.headers['Content-Range'] = options.contentRange; }
也就是在options.headers中增加我这个应用中的当前用户名和密码。
然后再次运行发送功能,果然Headers中就有了username和password这两项,哈哈!
总结一下,很多时候遇到一些古怪的需求和问题,绝大多数都是可以克服的,只是需要相当的耐心去一点一点发掘相关的信息。