SimXhr.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /**
  2. * Simulates an XMLHttpRequest object's methods and properties but is backed by a
  3. * {@link Ext.ux.ajax.Simlet} instance that provides the data.
  4. */
  5. Ext.define('Ext.ux.ajax.SimXhr', {
  6. readyState: 0,
  7. mgr: null,
  8. simlet: null,
  9. constructor: function (config) {
  10. var me = this;
  11. Ext.apply(me, config);
  12. me.requestHeaders = {};
  13. },
  14. abort: function () {
  15. var me = this;
  16. if (me.timer) {
  17. Ext.undefer(me.timer);
  18. me.timer = null;
  19. }
  20. me.aborted = true;
  21. },
  22. getAllResponseHeaders: function () {
  23. var headers = [];
  24. if (Ext.isObject(this.responseHeaders)) {
  25. Ext.Object.each(this.responseHeaders, function (name, value) {
  26. headers.push(name + ': ' + value);
  27. });
  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. delay = me.simlet.delay || me.mgr.delay;
  50. if (delay) {
  51. me.timer = Ext.defer(function () {
  52. me.onTick();
  53. }, delay);
  54. } else {
  55. me.onTick();
  56. }
  57. },
  58. send: function (body) {
  59. var me = this;
  60. me.body = body;
  61. if (me.async) {
  62. me.schedule();
  63. } else {
  64. me.onComplete();
  65. }
  66. },
  67. setReadyState: function (state) {
  68. var me = this;
  69. if (me.readyState != state) {
  70. me.readyState = state;
  71. me.onreadystatechange();
  72. }
  73. },
  74. setRequestHeader: function (header, value) {
  75. this.requestHeaders[header] = value;
  76. },
  77. // handlers
  78. onreadystatechange: Ext.emptyFn,
  79. onComplete: function () {
  80. var me = this,
  81. callback;
  82. me.readyState = 4;
  83. Ext.apply(me, me.simlet.exec(me));
  84. callback = me.jsonpCallback;
  85. if (callback) {
  86. var text = callback + '(' + me.responseText + ')';
  87. eval(text);
  88. }
  89. },
  90. onTick: function () {
  91. var me = this;
  92. me.timer = null;
  93. me.onComplete();
  94. me.onreadystatechange && me.onreadystatechange();
  95. }
  96. });