最近用jquery-file-upload插件做上传文件的功能。

jquery file upload 在http Header中增加header项_jquery

其他的功能都齐了,但是遇到一个问题,后台对于每一次请求都要验证一下是不是登录用户发过来的,根据就是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这两项,哈哈!

jquery file upload 在http Header中增加header项_jquery _02


总结一下,很多时候遇到一些古怪的需求和问题,绝大多数都是可以克服的,只是需要相当的耐心去一点一点发掘相关的信息。