@@ -2935,7 +2935,10 @@ var CommonServiceBase = exports.CommonServiceBase = function () {
2935
2935
if ( response . text ) {
2936
2936
return response . text ( ) ;
2937
2937
}
2938
- return response . json ( ) ;
2938
+ if ( response . json ) {
2939
+ return response . json ( ) ;
2940
+ }
2941
+ return response ;
2939
2942
} ) . then ( function ( text ) {
2940
2943
var result = text ;
2941
2944
if ( typeof text === "string" ) {
@@ -2975,7 +2978,7 @@ _SuperMap.SuperMap.CommonServiceBase = CommonServiceBase;
2975
2978
Object . defineProperty ( exports , "__esModule" , {
2976
2979
value : true
2977
2980
} ) ;
2978
- exports . FetchRequest = exports . RequestTimeout = exports . CORS = undefined ;
2981
+ exports . FetchRequest = exports . getRequestTimeout = exports . setRequestTimeout = exports . isCORS = exports . setCORS = undefined ;
2979
2982
2980
2983
var _typeof = typeof Symbol === "function" && typeof Symbol . iterator === "symbol" ? function ( obj ) { return typeof obj ; } : function ( obj ) { return obj && typeof Symbol === "function" && obj . constructor === Symbol && obj !== Symbol . prototype ? "symbol" : typeof obj ; } ;
2981
2984
@@ -2994,19 +2997,41 @@ var _Util = __webpack_require__(1);
2994
2997
function _interopRequireDefault ( obj ) { return obj && obj . __esModule ? obj : { default : obj } ; }
2995
2998
2996
2999
var fetch = window . fetch ;
2997
-
2998
3000
/**
2999
- * @member SuperMap.CORS
3001
+ * @function SuperMap.setCORS
3002
+ * @description 设置是否支持跨域
3003
+ * @param {boolean } cors - 是否支持跨域
3004
+ */
3005
+ var setCORS = exports . setCORS = _SuperMap . SuperMap . setCORS = function ( cors ) {
3006
+ _SuperMap . SuperMap . CORS = cors ;
3007
+ } ;
3008
+ /**
3009
+ * @function SuperMap.isCORS
3000
3010
* @description 是否支持跨域
3001
- * @type {boolean }
3011
+ * @returns {boolean } 是否支持跨域
3002
3012
*/
3003
- var CORS = exports . CORS = _SuperMap . SuperMap . CORS = _SuperMap . SuperMap . CORS || window . XMLHttpRequest && 'withCredentials' in new window . XMLHttpRequest ( ) ;
3013
+ var isCORS = exports . isCORS = _SuperMap . SuperMap . isCORS = function ( ) {
3014
+ if ( _SuperMap . SuperMap . CORS != undefined ) {
3015
+ return _SuperMap . SuperMap . CORS ;
3016
+ }
3017
+ return window . XMLHttpRequest && 'withCredentials' in new window . XMLHttpRequest ( ) ;
3018
+ } ;
3004
3019
/**
3005
- * @member SuperMap.RequestTimeout
3006
- * @description 请求超时时间,默认45s
3007
- * @type {number }
3020
+ * @function SuperMap.setRequestTimeout
3021
+ * @description 设置请求超时时间。
3022
+ * @param {number } timeout - 请求超时时间
3008
3023
*/
3009
- var RequestTimeout = exports . RequestTimeout = _SuperMap . SuperMap . RequestTimeout = _SuperMap . SuperMap . RequestTimeout || 45000 ;
3024
+ var setRequestTimeout = exports . setRequestTimeout = _SuperMap . SuperMap . setRequestTimeout = function ( timeout ) {
3025
+ return _SuperMap . SuperMap . RequestTimeout = timeout ;
3026
+ } ;
3027
+ /**
3028
+ * @function SuperMap.getRequestTimeout
3029
+ * @description 获取请求超时时间,默认45s。
3030
+ * @returns {number } 请求超时时间
3031
+ */
3032
+ var getRequestTimeout = exports . getRequestTimeout = _SuperMap . SuperMap . getRequestTimeout = function ( ) {
3033
+ return _SuperMap . SuperMap . RequestTimeout || 45000 ;
3034
+ } ;
3010
3035
var FetchRequest = exports . FetchRequest = _SuperMap . SuperMap . FetchRequest = {
3011
3036
commit : function commit ( method , url , params , options ) {
3012
3037
method = method ? method . toUpperCase ( ) : method ;
@@ -3023,43 +3048,72 @@ var FetchRequest = exports.FetchRequest = _SuperMap.SuperMap.FetchRequest = {
3023
3048
return this . get ( url , params , options ) ;
3024
3049
}
3025
3050
} ,
3026
-
3051
+ supportDirectRequest : function supportDirectRequest ( url , options ) {
3052
+ return _Util . Util . isInTheSameDomain ( url ) || isCORS ( ) || options . proxy ;
3053
+ } ,
3027
3054
get : function get ( url , params , options ) {
3028
3055
options = options || { } ;
3029
3056
var type = 'GET' ;
3030
3057
url = this . _processUrl ( url , options ) ;
3031
3058
url = _Util . Util . urlAppend ( url , this . _getParameterString ( params || { } ) ) ;
3059
+ if ( ! this . supportDirectRequest ( url , options ) ) {
3060
+ url = url . replace ( '.json' , '.jsonp' ) ;
3061
+ var config = {
3062
+ url : url ,
3063
+ data : params
3064
+ } ;
3065
+ return _SuperMap . SuperMap . Util . RequestJSONP . GET ( config ) ;
3066
+ }
3032
3067
if ( ! this . urlIsLong ( url ) ) {
3033
- if ( _Util . Util . isInTheSameDomain ( url ) || CORS || options . proxy ) {
3034
- return this . _fetch ( url , params , options , type ) ;
3035
- }
3036
- if ( ! _Util . Util . isInTheSameDomain ( url ) ) {
3037
- url = url . replace ( '.json' , '.jsonp' ) ;
3038
- return this . _fetchJsonp ( url , options ) ;
3039
- }
3068
+ return this . _fetch ( url , params , options , type ) ;
3069
+ } else {
3070
+ return this . _postSimulatie ( type , url . substring ( 0 , url . indexOf ( '?' ) - 1 ) , params , options ) ;
3040
3071
}
3041
- return this . _postSimulatie ( type , url . substring ( 0 , url . indexOf ( '?' ) - 1 ) , params , options ) ;
3042
3072
} ,
3043
3073
3044
3074
delete : function _delete ( url , params , options ) {
3045
3075
options = options || { } ;
3046
3076
var type = 'DELETE' ;
3047
3077
url = this . _processUrl ( url , options ) ;
3048
3078
url = _Util . Util . urlAppend ( url , this . _getParameterString ( params || { } ) ) ;
3049
- if ( ! this . urlIsLong ( url ) && CORS ) {
3050
- return this . _fetch ( url , params , options , type ) ;
3079
+ if ( ! this . supportDirectRequest ( url , options ) ) {
3080
+ url = url . replace ( '.json' , '.jsonp' ) ;
3081
+ var config = {
3082
+ url : url += "&_method=DELETE" ,
3083
+ data : params
3084
+ } ;
3085
+ return _SuperMap . SuperMap . Util . RequestJSONP . DELETE ( config ) ;
3086
+ }
3087
+ if ( this . urlIsLong ( url ) ) {
3088
+ return this . _postSimulatie ( type , url . substring ( 0 , url . indexOf ( '?' ) - 1 ) , params , options ) ;
3051
3089
}
3052
- return this . _postSimulatie ( type , url . substring ( 0 , url . indexOf ( '?' ) - 1 ) , params , options ) ;
3090
+ return this . _fetch ( url , params , options , type ) ;
3053
3091
} ,
3054
-
3055
3092
post : function post ( url , params , options ) {
3056
3093
options = options || { } ;
3094
+ if ( ! this . supportDirectRequest ( url , options ) ) {
3095
+ url = url . replace ( '.json' , '.jsonp' ) ;
3096
+ var config = {
3097
+ url : url += "&_method=POST" ,
3098
+ data : params
3099
+ } ;
3100
+ return _SuperMap . SuperMap . Util . RequestJSONP . POST ( config ) ;
3101
+ }
3057
3102
return this . _fetch ( this . _processUrl ( url , options ) , params , options , 'POST' ) ;
3058
3103
} ,
3059
3104
3060
3105
put : function put ( url , params , options ) {
3061
3106
options = options || { } ;
3062
- return this . _fetch ( this . _processUrl ( url , options ) , params , options , 'PUT' ) ;
3107
+ url = this . _processUrl ( url , options ) ;
3108
+ if ( ! this . supportDirectRequest ( url , options ) ) {
3109
+ url = url . replace ( '.json' , '.jsonp' ) ;
3110
+ var config = {
3111
+ url : url += "&_method=PUT" ,
3112
+ data : params
3113
+ } ;
3114
+ return _SuperMap . SuperMap . Util . RequestJSONP . DELETE ( config ) ;
3115
+ }
3116
+ return this . _fetch ( url , params , options , 'PUT' ) ;
3063
3117
} ,
3064
3118
urlIsLong : function urlIsLong ( url ) {
3065
3119
//当前url的字节长度。
@@ -3126,7 +3180,7 @@ var FetchRequest = exports.FetchRequest = _SuperMap.SuperMap.FetchRequest = {
3126
3180
body : type === 'PUT' || type === 'POST' ? params : undefined ,
3127
3181
credentials : options . withCredentials ? 'include' : 'omit' ,
3128
3182
mode : 'cors' ,
3129
- timeout : RequestTimeout
3183
+ timeout : getRequestTimeout ( )
3130
3184
} ) . then ( function ( response ) {
3131
3185
return response ;
3132
3186
} ) ) ;
@@ -3137,15 +3191,18 @@ var FetchRequest = exports.FetchRequest = _SuperMap.SuperMap.FetchRequest = {
3137
3191
headers : options . headers ,
3138
3192
credentials : options . withCredentials ? 'include' : 'omit' ,
3139
3193
mode : 'cors' ,
3140
- timeout : RequestTimeout
3194
+ timeout : getRequestTimeout ( )
3141
3195
} ) . then ( function ( response ) {
3142
3196
return response ;
3143
3197
} ) ;
3144
3198
} ,
3145
3199
3146
3200
_fetchJsonp : function _fetchJsonp ( url , options ) {
3147
3201
options = options || { } ;
3148
- return ( 0 , _fetchJsonp3 . default ) ( url , { method : 'GET' , timeout : options . timeout } ) . then ( function ( response ) {
3202
+ return ( 0 , _fetchJsonp3 . default ) ( url , {
3203
+ method : 'GET' ,
3204
+ timeout : options . timeout
3205
+ } ) . then ( function ( response ) {
3149
3206
return response ;
3150
3207
} ) ;
3151
3208
} ,
@@ -3186,6 +3243,172 @@ var FetchRequest = exports.FetchRequest = _SuperMap.SuperMap.FetchRequest = {
3186
3243
return url . indexOf ( '.mvt' ) > - 1 || url . indexOf ( '.pbf' ) > - 1 ;
3187
3244
}
3188
3245
} ;
3246
+ _SuperMap . SuperMap . Util . RequestJSONP = {
3247
+ limitLength : 1500 ,
3248
+ queryKeys : [ ] ,
3249
+ queryValues : [ ] ,
3250
+ supermap_callbacks : { } ,
3251
+ addQueryStrings : function addQueryStrings ( values ) {
3252
+ var me = this ;
3253
+ for ( var key in values ) {
3254
+ me . queryKeys . push ( key ) ;
3255
+ if ( typeof values [ key ] !== "string" ) {
3256
+ values [ key ] = _SuperMap . SuperMap . Util . toJSON ( values [ key ] ) ;
3257
+ }
3258
+ var tempValue = encodeURIComponent ( values [ key ] ) ;
3259
+ me . queryValues . push ( tempValue ) ;
3260
+ }
3261
+ } ,
3262
+ issue : function issue ( config ) {
3263
+ var me = this ,
3264
+ uid = me . getUid ( ) ,
3265
+ url = config . url ,
3266
+ splitQuestUrl = [ ] ;
3267
+ var p = new Promise ( function ( resolve ) {
3268
+ me . supermap_callbacks [ uid ] = function ( response ) {
3269
+ delete me . supermap_callbacks [ uid ] ;
3270
+ resolve ( response ) ;
3271
+ } ;
3272
+ } ) ;
3273
+
3274
+ // me.addQueryStrings({
3275
+ // callback: "SuperMap.Util.RequestJSONP.supermap_callbacks[" + uid + "]"
3276
+ // });
3277
+ var sectionURL = url ,
3278
+ keysCount = 0 ; //此次sectionURL中有多少个key
3279
+ var length = me . queryKeys ? me . queryKeys . length : 0 ;
3280
+ for ( var i = 0 ; i < length ; i ++ ) {
3281
+ if ( sectionURL . length + me . queryKeys [ i ] . length + 2 >= me . limitLength ) {
3282
+ //+2 for ("&"or"?")and"="
3283
+ if ( keysCount == 0 ) {
3284
+ return false ;
3285
+ }
3286
+ if ( splitQuestUrl == null ) {
3287
+ splitQuestUrl = new Array ( ) ;
3288
+ }
3289
+ splitQuestUrl . push ( sectionURL ) ;
3290
+ sectionURL = url ;
3291
+ keysCount = 0 ;
3292
+ i -- ;
3293
+ } else {
3294
+ if ( sectionURL . length + me . queryKeys [ i ] . length + 2 + me . queryValues [ i ] . length > me . limitLength ) {
3295
+ var leftValue = me . queryValues [ i ] ;
3296
+ while ( leftValue . length > 0 ) {
3297
+ var leftLength = me . limitLength - sectionURL . length - me . queryKeys [ i ] . length - 2 ; //+2 for ("&"or"?")and"="
3298
+ if ( sectionURL . indexOf ( "?" ) > - 1 ) {
3299
+ sectionURL += "&" ;
3300
+ } else {
3301
+ sectionURL += "?" ;
3302
+ }
3303
+ var tempLeftValue = leftValue . substring ( 0 , leftLength ) ;
3304
+ //避免 截断sectionURL时,将类似于%22这样的符号截成两半,从而导致服务端组装sectionURL时发生错误
3305
+ if ( tempLeftValue . substring ( leftLength - 1 , leftLength ) === "%" ) {
3306
+ leftLength -= 1 ;
3307
+ tempLeftValue = leftValue . substring ( 0 , leftLength ) ;
3308
+ } else if ( tempLeftValue . substring ( leftLength - 2 , leftLength - 1 ) === "%" ) {
3309
+ leftLength -= 2 ;
3310
+ tempLeftValue = leftValue . substring ( 0 , leftLength ) ;
3311
+ }
3312
+
3313
+ sectionURL += me . queryKeys [ i ] + "=" + tempLeftValue ;
3314
+ leftValue = leftValue . substring ( leftLength ) ;
3315
+ if ( tempLeftValue . length > 0 ) {
3316
+ if ( splitQuestUrl == null ) {
3317
+ splitQuestUrl = new Array ( ) ;
3318
+ }
3319
+ splitQuestUrl . push ( sectionURL ) ;
3320
+ sectionURL = url ;
3321
+ keysCount = 0 ;
3322
+ }
3323
+ }
3324
+ } else {
3325
+ keysCount ++ ;
3326
+ if ( sectionURL . indexOf ( "?" ) > - 1 ) {
3327
+ sectionURL += "&" ;
3328
+ } else {
3329
+ sectionURL += "?" ;
3330
+ }
3331
+ sectionURL += me . queryKeys [ i ] + "=" + me . queryValues [ i ] ;
3332
+ }
3333
+ }
3334
+ }
3335
+ if ( splitQuestUrl == null ) {
3336
+ splitQuestUrl = new Array ( ) ;
3337
+ }
3338
+ splitQuestUrl . push ( sectionURL ) ;
3339
+ me . send ( splitQuestUrl , "SuperMap.Util.RequestJSONP.supermap_callbacks[" + uid + "]" , config && config . proxy ) ;
3340
+ return p ;
3341
+ } ,
3342
+
3343
+ getUid : function getUid ( ) {
3344
+ var uid = new Date ( ) . getTime ( ) ,
3345
+ random = Math . floor ( Math . random ( ) * 1e17 ) ;
3346
+ return uid * 1000 + random ;
3347
+ } ,
3348
+
3349
+ send : function send ( splitQuestUrl , callback , proxy ) {
3350
+ var len = splitQuestUrl . length ;
3351
+ if ( len > 0 ) {
3352
+ var jsonpUserID = new Date ( ) . getTime ( ) ;
3353
+ for ( var i = 0 ; i < len ; i ++ ) {
3354
+ var url = splitQuestUrl [ i ] ;
3355
+ if ( url . indexOf ( "?" ) > - 1 ) {
3356
+ url += "&" ;
3357
+ } else {
3358
+ url += "?" ;
3359
+ }
3360
+ url += "sectionCount=" + len ;
3361
+ url += "§ionIndex=" + i ;
3362
+ url += "&jsonpUserID=" + jsonpUserID ;
3363
+ if ( proxy ) {
3364
+ url = decodeURIComponent ( url ) ;
3365
+ url = proxy + encodeURIComponent ( url ) ;
3366
+ }
3367
+ ( 0 , _fetchJsonp3 . default ) ( url , {
3368
+ jsonpCallbackFunction : callback ,
3369
+ timeout : 30000
3370
+ } ) ;
3371
+ }
3372
+ }
3373
+ } ,
3374
+
3375
+ GET : function GET ( config ) {
3376
+ var me = this ;
3377
+ me . queryKeys . length = 0 ;
3378
+ me . queryValues . length = 0 ;
3379
+ me . addQueryStrings ( config . params ) ;
3380
+ return me . issue ( config ) ;
3381
+ } ,
3382
+
3383
+ POST : function POST ( config ) {
3384
+ var me = this ;
3385
+ me . queryKeys . length = 0 ;
3386
+ me . queryValues . length = 0 ;
3387
+ me . addQueryStrings ( {
3388
+ requestEntity : config . data
3389
+ } ) ;
3390
+ return me . issue ( config ) ;
3391
+ } ,
3392
+
3393
+ PUT : function PUT ( config ) {
3394
+ var me = this ;
3395
+ me . queryKeys . length = 0 ;
3396
+ me . queryValues . length = 0 ;
3397
+ me . addQueryStrings ( {
3398
+ requestEntity : config . data
3399
+ } ) ;
3400
+ return me . issue ( config ) ;
3401
+ } ,
3402
+ DELETE : function DELETE ( config ) {
3403
+ var me = this ;
3404
+ me . queryKeys . length = 0 ;
3405
+ me . queryValues . length = 0 ;
3406
+ me . addQueryStrings ( {
3407
+ requestEntity : config . data
3408
+ } ) ;
3409
+ return me . issue ( config ) ;
3410
+ }
3411
+ } ;
3189
3412
3190
3413
/***/ } ) ,
3191
3414
/* 8 */
0 commit comments