SimXhr.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /**
  2. * @author Don Griffin
  3. *
  4. * Simulates an XMLHttpRequest object's methods and properties but is backed by a
  5. * {@link Ext.ux.ajax.Simlet} instance that provides the data.
  6. */
  7. Ext.define('Ext.ux.ajax.SimXhr', {
  8. readyState: 0,
  9. mgr: null,
  10. simlet: null,
  11. constructor: function (config) {
  12. var me = this;
  13. Ext.apply(me, config);
  14. me.requestHeaders = {};
  15. },
  16. abort: function () {
  17. var me = this;
  18. if (me.timer) {
  19. clearTimeout(me.timer);
  20. me.timer = null;
  21. }
  22. me.aborted = true;
  23. },
  24. getAllResponseHeaders: function () {
  25. var headers = [];
  26. Ext.Object.each(this.responseHeaders, function (name, value) {
  27. headers.push(name + ': ' + value);
  28. });
  29. return headers.join('\x0d\x0a');
  30. },
  31. getResponseHeader: function (header) {
  32. var headers = this.responseHeaders;
  33. return (headers && headers[header]) || null;
  34. },
  35. open: function (method, url, async, user, password) {
  36. var me = this;
  37. me.method = method;
  38. me.url = url;
  39. me.async = async !== false;
  40. me.user = user;
  41. me.password = password;
  42. me.setReadyState(1);
  43. },
  44. overrideMimeType: function (mimeType) {
  45. this.mimeType = mimeType;
  46. },
  47. schedule: function () {
  48. var me = this;
  49. me.timer = setTimeout(function () {
  50. me.onTick();
  51. }, me.mgr.delay);
  52. },
  53. send: function (body) {
  54. var me = this;
  55. me.body = body;
  56. if (me.async) {
  57. me.schedule();
  58. } else {
  59. me.onComplete();
  60. }
  61. },
  62. setReadyState: function (state) {
  63. var me = this;
  64. if (me.readyState != state) {
  65. me.readyState = state;
  66. me.onreadystatechange();
  67. }
  68. },
  69. setRequestHeader: function (header, value) {
  70. this.requestHeaders[header] = value;
  71. },
  72. // handlers
  73. onreadystatechange: Ext.emptyFn,
  74. onComplete: function () {
  75. var me = this,
  76. callback;
  77. me.readyState = 4;
  78. Ext.apply(me, me.simlet.exec(me));
  79. callback = me.jsonpCallback;
  80. if (callback) {
  81. var text = callback + '(' + me.responseText + ')';
  82. eval(text);
  83. }
  84. },
  85. onTick: function () {
  86. var me = this;
  87. me.timer = null;
  88. me.onComplete();
  89. me.onreadystatechange();
  90. }
  91. });