jsonp.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. var loadJs = require('./loadJs');
  2. var defaults = require('./defaults');
  3. var noop = require('./noop');
  4. var uniqId = require('./uniqId');
  5. var query = require('./query');
  6. exports = function(options) {
  7. defaults(options, exports.settings);
  8. var name = options.name || uniqId('jsonp');
  9. var param = options.param;
  10. var timeout = options.timeout;
  11. var error = options.error;
  12. var success = options.success;
  13. var complete = options.complete;
  14. var data = options.data;
  15. var url = options.url;
  16. var timer;
  17. var isTimeout = false;
  18. if (timeout > 0) {
  19. timer = setTimeout(function() {
  20. isTimeout = true;
  21. error(new Error('Timeout'));
  22. complete();
  23. }, timeout);
  24. }
  25. window[name] = function(data) {
  26. success(data);
  27. complete();
  28. window[name] = noop;
  29. };
  30. if (!false) {
  31. data[param] = name;
  32. data = query.stringify(data);
  33. url += url.indexOf('?') > -1 ? '&' + data : '?' + data;
  34. }
  35. loadJs(url, function(isLoaded) {
  36. if (isTimeout) return;
  37. if (timer) clearTimeout(timer);
  38. if (!isLoaded) {
  39. error(new Error());
  40. complete();
  41. }
  42. });
  43. };
  44. exports.settings = {
  45. data: {},
  46. param: 'callback',
  47. success: noop,
  48. error: noop,
  49. complete: noop,
  50. timeout: 0
  51. };
  52. module.exports = exports;