-
-
Save maslick/56368a022dd7c3fc2adc1356db35e69d to your computer and use it in GitHub Desktop.
Simple JSONP in vanilla JS
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* loadJSONP( url, hollaback [, context] ) -> Null | |
* - url (String): URL to data resource. | |
* - hollaback (Function): Function to call when data is successfully loaded, | |
* it receives one argument: the data. | |
* - context (Object): Context to invoke the hollaback function in. | |
* | |
* Load external data through a JSONP interface. | |
* | |
* ### Examples | |
* | |
* loadJSONP( | |
* 'http://www.gigpark.com/businesses/runlevel6.json', | |
* function(data) { | |
* console.log(data) | |
* } | |
* ) | |
**/ | |
var loadJSONP = (function loadJSONP_outer( window, document, undefined ) { var uuid, head, main_script | |
uuid = 0 | |
head = document.head || document.getElementsByTagName( 'head' )[0] | |
main_script = document.createElement( 'script' ) | |
main_script.type = 'text/javascript' | |
return function loadJSONP_inner( url, callback, context ) { var name, script | |
// INIT | |
name = '__jsonp_' + uuid++ | |
if ( url.match(/\?/) ) | |
url += '&callback=' + name | |
else | |
url += '?callback=' + name | |
// Create script | |
script = main_script.cloneNode() | |
script.src = url | |
// Setup handler | |
window[name] = function( data ) { | |
callback.call( ( context || window ), data ) | |
head.removeChild( script ) | |
script = null | |
delete window[name] | |
} | |
// Load JSON | |
head.appendChild( script ) | |
} | |
})( window, document ) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment