URL 在另一个 URL 中的参数

Parameter of an URL within another URL

这个问题很容易理解,我会一步一步解释清楚。

我正在使用 Google Feed API 将 RSS 文件加载到我的 JavaScript 应用程序中。

我有一个绕过 Google 缓存的设置,如果需要的话,我通过在发送到 Google 饲料 API.

例如,假设这是一个 link 到 RSS:

http://example.com/feed.xml

为了绕过缓存,我在最后附加了一个随机数作为参数:

http://example.com/feed.xml?0.12345

整个 url 到 Google Feed API 看起来像这样,其中 "q" 是上面的 link:

https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=5&q=http://example.com/feed.xml?0.12345

这会绕过缓存,在大多数情况下效果很好,但是当我想使用的 RSS link 已经有参数时就会出现问题。例如,像这样:

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" url 的一部分而不是整个 url 的一部分?

您需要使用 encodeURIComponent 来执行此操作。

encodeURIComponent('http://example.com/feed.xml&0.1234')

将导致

http%3A%2F%2Fexample.com%2Ffeed.xml%260.1234

当附加到最终结果时,您将得到

https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=5&q=http%3A%2F%2Fexample.com%2Ffeed.xml%260.1234

您需要像这样使用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>

您正在转义本来会被视为 url 的一部分的特殊字符。

追加或创建查询字符串:

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;