@@ -5,9 +5,8 @@ import randomPlugin from './random'
55 */
66let defaultFormatCallback = function ( d ) { return d . data ; } ;
77let STRATEGY = {
8- LOCAL_GLOBAL :0 , //局部配置优先
9- GLOBAL_LOCAL :0 , //局部配置优先
10-
8+ LOCAL_GLOBAL :0 , //局部配置优先,全局次之
9+ GLOBAL_LOCAL :1 , //全局配置优先,局部次之
1110}
1211let AJAXCONF = {
1312 instanceName :"$ajax" ,
@@ -17,7 +16,7 @@ let AJAXCONF={
1716 WSGlobalInstanceName :"$socket" . replace ( / \$ / g, '' ) ,
1817 successFormatCallback :defaultFormatCallback ,
1918 errorFormatCallback :defaultFormatCallback ,
20- userDefaultConfig :{ } ,
19+ userDefaultConfig :function ( ) { return { } } ,
2120 requestInterceptor :function ( opt , req ) { return opt ; } ,
2221 responseInterceptor :function ( res , req ) { return res ; } ,
2322 successStatus :function ( status ) { return status === 200 ; } ,
@@ -60,13 +59,13 @@ let ajax = {
6059 } ;
6160 this . isMock = function ( option ) {
6261 var useMock = AJAXCONF . mockMode ;
63- this . mockInstance = AJAXCONF . mockCache [ option . url ] ;
62+ this . mockInstance = AJAXCONF . mockCache [ "@" + option . type . toLowerCase ( ) + ":" + option . url ] ;
6463 if ( option . mock !== undefined && option . mock !== null ) {
6564 if ( option . mock === true ) {
6665 //启用mock
6766 useMock = true ;
6867 if ( this . isNull ( this . mockInstance ) ) {
69- this . mockInstance = AJAXCONF . mockCache [ "@" + option . type . toLowerCase ( ) + ":" + option . url ] ;
68+ this . mockInstance = AJAXCONF . mockCache [ option . url ] ;
7069 if ( this . isNull ( this . mockInstance ) ) {
7170 useMock = false ;
7271 }
@@ -93,7 +92,7 @@ let ajax = {
9392 //全局使用mock,但是未配置实现方法,设置useMock=false,会直接默认请求option.url
9493 if ( useMock ) {
9594 if ( this . isNull ( this . mockInstance ) ) {
96- this . mockInstance = AJAXCONF . mockCache [ "@" + option . type . toLowerCase ( ) + ":" + option . url ] ;
95+ this . mockInstance = AJAXCONF . mockCache [ option . url ] ;
9796 if ( this . isNull ( this . mockInstance ) ) {
9897 useMock = false ;
9998 }
@@ -238,7 +237,7 @@ let ajax = {
238237 this . send = function ( config ) {
239238 var scope = this . scope ;
240239 var formatResult = this . formatResult ;
241- var opt = Object . assign ( this . defaultConfig , AJAXCONF . userDefaultConfig , config ) ;
240+ var opt = Object . assign ( this . defaultConfig , AJAXCONF . userDefaultConfig ( ) , config ) ;
242241 if ( this . isMock ( opt ) ) {
243242 return this . mock ( opt , scope ) ;
244243 }
@@ -253,18 +252,37 @@ let ajax = {
253252 else {
254253 request . open ( opt . type , AJAXCONF . baseUrl + opt . url , opt . async ) ;
255254 }
256- if ( opt . dataType . toLowerCase ( ) === 'json' ) {
257- request . setRequestHeader ( "Content-type" , "application/json;charset=UTF-8" ) ;
258- }
259- else if ( opt . dataType . toLowerCase ( ) === 'form' ) {
260- request . setRequestHeader ( "Content-type" , "application/x-www-form-urlencoded;charset=UTF-8" ) ;
261- } else { }
255+
262256 //加入header
263257 if ( opt . headers ) {
264258 Object . keys ( opt . headers ) . forEach ( item => {
265- request . setRequestHeader ( item , opt . headers [ item ] ) ;
259+ if ( item . toLowerCase ( ) === "content-type" ) {
260+ //用户无设置自定义header
261+ if ( opt . dataType . toLowerCase ( ) === 'json' ) {
262+ request . setRequestHeader ( "Content-type" , "application/json;charset=UTF-8" ) ;
263+ }
264+ else if ( opt . dataType . toLowerCase ( ) === 'form' ) {
265+ request . setRequestHeader ( "Content-type" , "application/x-www-form-urlencoded;charset=UTF-8" ) ;
266+ }
267+ else {
268+ request . setRequestHeader ( item , opt . headers [ item ] ) ;
269+ }
270+ }
271+ else {
272+ request . setRequestHeader ( item , opt . headers [ item ] ) ;
273+ }
274+
266275 } ) ;
267276 }
277+ else {
278+ //用户无设置自定义header
279+ if ( opt . dataType . toLowerCase ( ) === 'json' ) {
280+ request . setRequestHeader ( "Content-type" , "application/json;charset=UTF-8" ) ;
281+ }
282+ else if ( opt . dataType . toLowerCase ( ) === 'form' ) {
283+ request . setRequestHeader ( "Content-type" , "application/x-www-form-urlencoded;charset=UTF-8" ) ;
284+ } else { }
285+ }
268286
269287 if ( opt . responseType != null ) {
270288 request . responseType = opt . responseType ;
@@ -316,7 +334,7 @@ let ajax = {
316334 }
317335 }
318336 }
319- if ( opt . type . toLowerCase ( ) === "post" && opt . dataType . toLowerCase ( ) === 'json' && opt . data ) {
337+ if ( opt . dataType . toLowerCase ( ) === 'json' && opt . data ) {
320338 opt . data = JSON . stringify ( opt . data ) ;
321339 }
322340 }
@@ -359,17 +377,32 @@ let ajax = {
359377 }
360378 }
361379 request . send ( newOpt . data ) ;
380+ if ( newOpt . cancel ) {
381+ newOpt . cancel . call ( scope , function ( ) {
382+ var oldState = request . readyState ;
383+ request . abort ( ) ;
384+ if ( oldState < 4 ) {
385+ if ( newOpt . complete ) {
386+ newOpt . complete . call ( scope ) ;
387+ }
388+ if ( newOpt . error ) {
389+ newOpt . error . apply ( scope , [ request ] ) ;
390+ }
391+ reject ( request ) ;
392+ }
393+ } ) ;
394+ }
395+ // var abortIntervalHandler=null;
396+ // if (newOpt.cancel) {
397+ // abortIntervalHandler = setInterval(function() {
398+ // newOpt.cancel.call(scope, function() {
399+ // request.abort();
400+ // clearInterval(abortIntervalHandler);
401+ // abortIntervalHandler = null;
402+ // });
403+ // }, 0);
404+ // }
362405 request . onreadystatechange = function ( ) {
363-
364- if ( newOpt . cancel ) {
365- abortIntervalHandler = setInterval ( function ( ) {
366- newOpt . cancel . call ( scope , function ( ) {
367- request . abort ( ) ;
368- clearInterval ( abortIntervalHandler ) ;
369- abortIntervalHandler = null ;
370- } ) ;
371- } , 0 ) ;
372- }
373406 if ( request . readyState === 4 ) { // 4代表执行完成
374407 request . _complete = true ;
375408 if ( newOpt . complete ) {
@@ -462,7 +495,17 @@ let ajax = {
462495 } ;
463496 } )
464497 . catch ( function ( e ) {
465- formatResult ( scope , request . responseText , request , opt , false ) . then ( dd => reject ( dd [ 0 ] ) ) . catch ( ee => reject ( ee [ 0 ] ) )
498+ formatResult ( scope , request . responseText , request , opt , false ) . then ( dd => {
499+ if ( opt . success ) {
500+ opt . success . apply ( scope , dd ) ;
501+ }
502+ reject ( dd [ 0 ] ) ;
503+ } ) . catch ( ee => {
504+ if ( opt . error ) {
505+ opt . error . apply ( scope , dd ) ;
506+ }
507+ reject ( ee [ 0 ] )
508+ } )
466509 } )
467510
468511 } catch ( err ) {
0 commit comments