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');
}
});
我有一个 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');
}
});