Skip to content

Instantly share code, notes, and snippets.

@hboon
Forked from gf3/jsonp.js
Created July 14, 2017 07:42
Show Gist options
  • Save hboon/baf3bb8f8571f56874761fcf277b3801 to your computer and use it in GitHub Desktop.
Save hboon/baf3bb8f8571f56874761fcf277b3801 to your computer and use it in GitHub Desktop.
Simple JSONP in vanilla JS
/**
* 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