这是一个简单易懂的问题,我将逐步解释以使一切都清楚。
我正在使用 Google Feed API 将 RSS 文件加载到我的 JavaScript 应用程序中。
如果需要,我有一个设置可以绕过 Google 缓存,并且我通过在发送到 Google Feed API 的 RSS 文件链接末尾附加一个随机数来实现此目的。
例如,假设这是一个 RSS 链接:
http://example.com/feed.xml
为了绕过缓存,我在末尾附加一个随机数作为参数:
http://example.com/feed.xml?0.12345
Google Feed API 的整个网址如下所示,其中“q”是上面的链接:
https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=5&q=http://example.com/feed.xml?0.12345
这会绕过缓存并在大多数情况下运行良好,但当我想要使用的 RSS 链接已经有参数时就会出现问题。例如,像这样:
http://example.com/feed?type=rss
像以前一样在末尾附加数字会出错,并且不会返回 RSS 文件:
http://example.com/feed?type=rss?0.12345 // ERROR
我尝试使用“&”附加随机数,如下所示:
http://example.com/feed?type=rss&0.12345
这不再给出错误并且 RSS 文件被正确返回。但如果我在 Google Feed API url 中使用上述内容,它就不再绕过缓存:
https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=5&q=http://example.com/feed.xml&0.1234
这是因为“0.1234”被认为是整个url的参数,而不是“q”url的参数。因此“q”仅保留为“http://example.com/feed.xml”,它不是唯一的,因此会加载缓存版本。
有没有办法让数字参数成为“q”网址的一部分而不是整个网址的一部分?
最佳答案
您需要像这样使用encodeURIComponent
:
var url = 'http://example.com/feed.xml&0.1234';
document.getElementById('results').innerHTML = 'https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=5&q=' + encodeURIComponent(url);
<pre id="results"></pre>
您正在转义原本会被视为网址一部分的特殊字符。
要附加或创建查询字符串:
var url = 'http://example.com/feed.xml';
var randomParameter = '0.1234';
var queryString = url.indexOf('?') > - 1;
if(queryString){
url = url + '&' + randomParameter;
} else {
url = url + '?' + randomParameter;
}
//url needs to be escaped with encodeURIComponent;
关于javascript - 一个 URL 包含在另一个 URL 中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32798587/