Angular $ http params编码问题

时间:2015-06-10 18:25:59

标签: javascript angularjs angular-http

我有一个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方法时,如何维护原始密钥?

1 个答案:

答案 0 :(得分:1)

Angular确实encode params。您应该拨打decodeURIComponent,因为该密钥已经过编码。

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