Angular $http 参数编码问题

Angular $http params encoding issue

我有一个 Angular 1.4 服务向 MapQuest API 发出 $http.get() 请求。如果我直接将我的 API 密钥作为 url 的一部分传递,那么它可以工作,但是如果我将它添加为 params 字段的一部分,那么它就不会。

工作:

var url = 'http://open.mapquestapi.com/geocoding/v1/address?key=Gmjtd%7Cluub2d08nh%2C2s%3Do5-2u2gh4';

$http.get(url);

// Key actually sent
Gmjtd%7Cluub2d08nh%2C2s%3Do5-2u2gh4

不工作:

var url = 'http://open.mapquestapi.com/geocoding/v1/address';

$http.get(url, { 
  params: { 
    key: 'Gmjtd%7Cluub2d08nh%2C2s%3Do5-2u2gh4'
  }
});

// Key actually sent
 Gmjtd%257Cluub2d08nh%252C2s%253Do5-su2gh4

也不工作:

var url = 'http://open.mapquestapi.com/geocoding/v1/address';

$http.get(url, { 
  params: { 
    key: encodeURIComponent('Gmjtd%7Cluub2d08nh%2C2s%3Do5-2u2gh4');
  }
});

// Key actually sent
Gmjtd%25257Cluub2d08nh%25252C2s%25253Do5-2u2gh4

似乎在 params 字段中传递密钥会导致它经历某种编码过程,从而使其无效。

使用params方法时如何保持原来的密钥?

Angular 确实 encode params。您应该调用 decodeURIComponent,因为密钥已经编码。

$http.get(url, { 
  params: { 
    key: decodeURIComponent('Gmjtd%7Cluub2d08nh%2C2s%3Do5-2u2gh4');
  }
});