AngularJS が標準の JavaScript 関数を使用してクエリ文字列パラメーターをエンコードすることを期待していましたencodeURIComponent
。次のテストによれば、そうではありません。
describe('$http', function () {
it('encodes uri components correctly', inject(function($http, $httpBackend) {
var data = 'Hello from http://example.com';
$httpBackend.expectGET('/api/process?data=' + encodeURIComponent(data));
$http({ method: 'GET', url: '/api/process', params: { data: data } });
$httpBackend.flush();
}));
});
テストは次のエラーで失敗します。
$http は uri コンポーネントを正しくエンコードします
エラー: Unexpected request: GET /api/process?data=Hello+from+http:%2F%2Fexample.com
Expected GET /api/process?data=Hello%20from%20http%3A%2F% 2Fexample.com
総括する:
- 予期されるエンコーディング:
Hello%20from%20http%3A%2F%2Fexample.com
- 実際のエンコーディング:
Hello+from+http:%2F%2Fexample.com
AngularJS では、どの uri コンポーネント (別名クエリ文字列パラメーター) エンコーディング メソッドを期待する必要がありますか?