;(function () { var formatparams = function (data) {//formatting parameters var arr = []; for (Var name in data) { arr.push (encodeURIComponent (name) + ' = ' + encodeuricomponent (data[ Name]); } Return arr.join (' & '); } var jsonp = function (options) { options = options | | {}; if (!options.url | | !options.callback) { throw new error ("argument not valid"); } //Create script tag and add to page var callbackName = (' Jsonp_ ' + math.random ( ). Replace (".", ""); var ohead = document.getElementsByTagName (' head ') [0]; var params = ""; if (Options.data) { options.data[options.callback] = callbackName; params += formatparams (Options.data); }else{ params+=options.callback+ "=" +CALLBACKNAME;        } var os = document.createelement (' script '); ohead.appendchild (OS); //Create JSONP callback function window[callbackName] = function (JSON) { ohead.removechild (OS); cleartimeout (Os.timer); window[callbackName] = null; options.success && options.success (JSON); }; //Send Request oS.src = options.url + '? ' + params; //Timeout processing if (options.time) { os.timer = settimeout (function () { window[ callbackname] = null; ohead.removechild (OS); options.fail && options.fail ({ message: "timeout"  }) ; }, options.time); } }; window.jsonp =  JSONP;}) ();//Call Method/*jsonp ({ url: "http://www.baidu.com", callback: " Callback ",  ///Background negotiation receive callback name data:{id: "1000120"}, success:function (JSON) { alert ("Jsonp_ok"); }, fail:function () { alert ("fail"); }, time:10000}) */
Original link: http://www.html-js.com/article/ Javascript-based-implementation-of-ajax-jsonp-and-native-js-dom-finishes-loading-events
Online collection of modified native JSONP code