123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- var loadJs = require('./loadJs');
- var defaults = require('./defaults');
- var noop = require('./noop');
- var uniqId = require('./uniqId');
- var query = require('./query');
- exports = function(options) {
- defaults(options, exports.settings);
- var name = options.name || uniqId('jsonp');
- var param = options.param;
- var timeout = options.timeout;
- var error = options.error;
- var success = options.success;
- var complete = options.complete;
- var data = options.data;
- var url = options.url;
- var timer;
- var isTimeout = false;
- if (timeout > 0) {
- timer = setTimeout(function() {
- isTimeout = true;
- error(new Error('Timeout'));
- complete();
- }, timeout);
- }
- window[name] = function(data) {
- success(data);
- complete();
- window[name] = noop;
- };
- if (!false) {
- data[param] = name;
- data = query.stringify(data);
- url += url.indexOf('?') > -1 ? '&' + data : '?' + data;
- }
- loadJs(url, function(isLoaded) {
- if (isTimeout) return;
- if (timer) clearTimeout(timer);
- if (!isLoaded) {
- error(new Error());
- complete();
- }
- });
- };
- exports.settings = {
- data: {},
- param: 'callback',
- success: noop,
- error: noop,
- complete: noop,
- timeout: 0
- };
- module.exports = exports;
|