http.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. try { module.exports = {http:http}; } catch (e) { }
  2. // Template: http.send(url + '?' + 'test1=1&test2=2', 'GET', '', {SomeHeader:'some header'}).done(function(data, status, headers) {console.log(data););
  3. var http = {
  4. receiveData:null,
  5. doneCallback:function(){},
  6. failCallback:function(){},
  7. settings:{},
  8. send: function(settings) {
  9. var $ = this;
  10. var defSett = {
  11. url:window.location.href,
  12. method:'GET',
  13. body:'',
  14. headers:{},
  15. returnType:'html',
  16. };
  17. $.settings = {};
  18. if (typeof settings === 'string') {
  19. $.settings = $.merge(defSett, {url:settings});
  20. } else {
  21. $.settings = $.merge(defSett, settings);
  22. }
  23. if (/^\/\//.test($.settings.url)) {
  24. $.settings.url = window.location.protocol + $.settings.url
  25. }
  26. if (!/^http[s]*\:\/\//.test($.settings.url)) {
  27. $.settings.url = window.location.origin + $.settings.url
  28. }
  29. var tList = [];
  30. if ($.settings.headers) {
  31. for (var prop in $.settings.headers) {
  32. tList.push(tuple(bin(prop),bin($.settings.headers[prop])));
  33. }
  34. }
  35. ws.send(enc(tuple(atom('http'),
  36. bin($.settings.url),
  37. bin($.settings.method||'GET'),
  38. bin($.settings.body||''),
  39. tList)
  40. ));
  41. return $;
  42. },
  43. back: function(d, s, h) {
  44. if (s >= 400) {
  45. this.failCallback(d, s, h);
  46. } else {
  47. if (this.settings.returnType === 'json') {
  48. try {
  49. d = JSON.parse(this.escapeSpecialChars(d));
  50. } catch (e) {
  51. if (debug) console.error('Unexpected string for JSON');
  52. };
  53. }
  54. this.doneCallback(d, s, h);
  55. }
  56. },
  57. done: function(callback) {
  58. this.doneCallback = callback;
  59. return this;
  60. },
  61. fail: function(callback) {
  62. this.failCallback = callback;
  63. return this;
  64. },
  65. merge: function(obj, src) {
  66. var newO = {};
  67. Object.keys(obj).forEach(function(key){newO[key] = obj[key];});
  68. Object.keys(src).forEach(function(key){newO[key] = src[key];});
  69. return newO;
  70. },
  71. escapeSpecialChars: function(jsonString) {
  72. return jsonString.replace(/\n/g, "\\n")
  73. .replace(/\r/g, "\\r")
  74. .replace(/\t/g, "\\t")
  75. .replace(/\f/g, "\\f");
  76. }
  77. };