Guest User

Untitled

a guest
Apr 25th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.67 KB | None | 0 0
  1. var request_v2 = function(url, opt){
  2. var req = new XMLHttpRequest(), ret = new Deferred();
  3.  
  4. opt = update({
  5. method: 'GET',
  6. sendContent: {}
  7. }, opt || {});
  8.  
  9. if(opt.queryString){
  10. var qs = queryString(opt.queryString, true);
  11. url += qs;
  12. }
  13.  
  14. if('username' in opt){
  15. req.open(opt.method ? opt.method : (opt.sendContent)? 'POST' : 'GET', url, true, opt.username, opt.password);
  16. } else {
  17. req.open(opt.method ? opt.method : (opt.sendContent)? 'POST' : 'GET', url, true);
  18. }
  19.  
  20. if(opt.charset) req.overrideMimeType(opt.charset);
  21.  
  22. if(opt.sendContent){
  23. var content = queryString(opt.sendContent, false);
  24. req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  25. } else {
  26. req.setRequestHeader('Content-Type', 'application/octet-stream');
  27. }
  28.  
  29. req.setRequestHeader("X-Requested-With", "XMLHttpRequest");
  30. if(opt.headers){
  31. Object.keys(opt.headers).forEach(function(key){
  32. req.setRequestHeader(key, opt.headers[key]);
  33. });
  34. }
  35.  
  36. var position = -1;
  37. var error = false;
  38.  
  39. req.onprogress = function(e){
  40. position = e.position;
  41. }
  42. req.onreadystatechange = function(e){
  43. if(req.readyState === 4){
  44. var length = 0;
  45. try {
  46. length = parseInt(req.getResponseHeader('Content-Length'), 10);
  47. } catch(e) {
  48. console.log('ERROR', e);
  49. }
  50. // 最終時のlengthと比較
  51. if(position !== length){
  52. if(opt.denyRedirection){
  53. ret.errback(req);
  54. error = true;
  55. }
  56. }
  57. if(!error){
  58. if (req.status >= 200 && req.status < 300)
  59. ret.callback(req);
  60. else
  61. ret.errback(req);
  62. }
  63. }
  64. }
  65. req.send(opt.sendContent);
  66. return ret;
  67. }
Add Comment
Please, Sign In to add comment