JSONPI.prototype.send = function(opts, callback){ var url, that = this, id = new Date().getTime(), jsonpiId = "jsonpi_"+id; this.jsonpiId = jsonpiId; //保存jsonpId window[jsonpiId] = function(){ callback.call(this, arguments); that.abort(); }; if(Base.isString(opts)){ url = opts; }else{ //选项预处理 opts=this._opts=this.optsPrepare(opts); url = opts['url']+"?"+Uri.param(opts["data"]); } url = url +"&"+opts["callback"]+"="+jsonpiId; //TODO 需测试Iframe是否会再次触发onload事件 var onComplete = function(){ if(Base.isFunction(opts["complete"])) opts["complete"](); that.abort(); }; Remote.requstWithResponse(opts["method"], url, opts["data"], jsonpiId); };
Request.prototype.optsPrepare = function(opts){ var data=opts['data']||{},form=""; if (opts['form']) { form = this.serializeForm(opts['form']); } if(Base.isString(data)){ data=Uri.deparam(data); } //浏览器缓存,请求中添加时间标签,不同请求浏览器不缓存 if (!opts['cache']) { data['_t'] = new Date().getTime(); } //合并data与form中的数据,data数据优先级比form高 opts['data'] = form + Uri.param(data); //请求过期检查 if ( opts['async'] && opts['timeout'] > 0 ) { var that = this; setTimeout(function() { that.abort(); }, opts['timeout']); } return Base.mix(opts,this._opts); };