ArcGIS API for JavaScript 3.x加载带有参数的服务(weixin公众号【图说GIS】)

前言

在使用ArcGIS API for JavaScript 3.x加载带有参数的服务是发现参数会被方法忽略掉。
有如下两种解决方案

方法

1. API自带的方法(推荐,不繁琐!)

参考《ArcGIS JS API for Javascript 3.x自定义服务传参》一文。核心代码如下,来自官方API

require([
  "esri/request", ... 
], function(esriRequest, ... ) {
  function myCallbackFunction(ioArgs) {
    // inspect ioArgs
    console.log(ioArgs.url, ioArgs.content);

    // or, change some query parameters if necessary
    ioArgs.content = ioArgs.content || {};
    ioArgs.content.token = "ABCDEF123456";

    // don't forget to return ioArgs.
    return ioArgs;
  }

  // where the argument ioArgs is of type: dojo.__XhrArgs (or) dojo.io.script.__ioArgs

  esriRequest.setRequestPreCallback(myCallbackFunction);
  ...
});

2.代理(解决问题的另一种思路)

我们可以通过代理方式拦截发出的请求。
如我要请求的服务url是:http://www.tianditu.cn/map/rest/services/Hosted/TDT_DT/VectorTileServer?njtoken=xxxxxx

  1. 开发环境代理
    我们可以通过webpack的代理配置如下:
 devServerConfig.proxy = {
      "/map/": {
            target: 'http://www.tianditu.cn', secure: false, changeOrigin: true,
            pathRewrite: function (path, req) {
               if (path.indexOf("?") > -1) {
                  path = `${path}&njtoken=xxxxxx`
               } else {
                  path = `${path}?njtoken=xxxxxx`
               }
               return path
            }
     },
  }
  1. nginx部署环境
 server {
        listen 8080;
        server_name localhost;
        location /{
            root html/web;
            try_files $uri /index.html;
        }

        location /map/ {  
            set $path 'http://www.tianditu.cn';
            set $token 'njtoken=xxxxxx';
            set $str '?';
            if ($request_uri ~* "[?]"){
                set $str "&";
            }
            proxy_pass   $path$request_uri$str$token;
        }
    }
  1. 程序代码实现
    这里要注意的是地址,为以上配置的代码。
const map = new Map('map', {
       center: [118.795367, 31.921581],
       zoom: 14,
});
const url = "/map/rest/services/Hosted/TDT_DT/VectorTileServer"
const vectorTileLayer = new VectorTileLayer(url);
map.addLayer(vectorTileLayer);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值