Classic AJAX requests are limited to the same domain. JSON with padding allows us to make requests to different domains. Below is an example of how to create a jsonP class, and handle requests using PHP.

JSON with padding works by making a JavaScript script request, using a SCRIPT tag and a callback function. The back end, in this example a PHP script, generates a JavaScript response wrapped around the callback function’s name. For each request, the JavaScript object below appends a new script tag, and generates a random function name, which in turn calls a user defined function bound to an optional scope.

var JsonP = function() {
        // Class constructor. Do nothing.
}

// Method used for appending the script tag, to the document body
JsonP.prototype.appendBodyScript = function( url, funcName ) {
        // Create the tag
        var element = document.createElement( 'script' );
        element.src = url + '?cb=' + funcName
        // Append to body
        document.body.appendChild( element );
}

// Method used for generating a long random number
JsonP.prototype.generateRandomNumber = function() {
        return Math.floor( Math.random() * 100000000000 );
}

// Method used for generating the random function name, and function
JsonP.prototype.generateFunc = function( cb, scope ) {
        // Generate random function name
        var funcName = 'jsonP' + this.generateRandomNumber();
        while ( typeof window[funcName] !== "undefined" ) {
        // Ensure we don't overwrite existing functions
                funcName = 'jsonP' + this.generateRandomNumber();
        }
        // NOTE: Function must be global, for the server generated script to be able to issue a call
        window[funcName] = function( response ) {
                if ( scope ) {
                        cb.bind( scope )( response );
                } else {
                        cb( response );
                }
        }
        return funcName;
}

// Method used for issuing a call
JsonP.prototype.get = function( url, cb, scope ) {
        this.appendBodyScript( url, this.generateFunc( cb, scope ) );
}

// Example usage
var testJsonP = new JsonP();
testJsonP.get(
        'http://localhost/'
        ,function( response ) {
                console.log( this );
                console.log( response );
        }
        ,{
                name: 'Test Scope'
        }
);

Example PHP Script: