我正在编写一个应用程序,允许用户通过选择要搜索的类型并输入要在文本框中搜索的内容来搜索数据。搜索类型中的一个选项是按网址搜索数据,因此搜索API将类似于:rest/search/{searchType}/{searchText}
。如果用户选择按网址搜索并输入https://app1.my.url.com
,则API将为rest/search/applicationURL/https://app1.my.url.com
。显然这是无效的,所以我使用encodeURIComponent()
对网址进行编码,但这并不会对.
进行编码,因此我手动将其替换为%2E
}(.
的编码)。
在我的GET功能中,我有以下代码:
search() {
if(searchType=='applicationURL') {
//encode the search Text, which will be a URL
searchText = encodeURIComponent(searchText);
//searchText, if 'https://app1.my.url.com', will be http%3A%2F%2Fapp1.my.url.com
searchText = searchText.replace(/\./, '%2E');
console.log(searchText); //for testing
}
//call custom GET function
this.submitService.GET('rest/search/' + searchType + '/' + searchText)
.subscribe(data => {
....
});
}
这就是奇怪行为的来源。从console.log中,我可以看到searchText
的最终值是http%3A%2F%2Fapp1%2Emy%2Eurl%2Ecom,但是我的GET调用显示rest/search/applicationURL/http%3A%2F%2Fapp1.my.url.com
,因此在拨打电话之前未完成替换值。我认为使用encodeURIComponent()
时存在同步问题,因此我尝试手动替换网址中的/
和:
&#。即使我这样做,它也会在调用时忽略正在编码的.
,即使searchText的最终值是正确的。我有什么遗失的吗?