2015-09-26 87 views
2

这是一个简单易懂的问题,我将逐步解释清楚一切。另一个URL内的URL参数

我正在使用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文件被正确地返回。但是,如果使用上面的谷歌饲料API链接,它不再绕过缓存:

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”的参数网址。因此,“q”仅保留为“http://example.com/feed.xml”,因此缓存版本的加载不是唯一的。

有没有办法让数字参数成为“q”网址的一部分,而不是整个网址的一部分?

回答

5

您需要使用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的一部分的特殊字符。

追加或创建的queryString:

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; 
+0

我会记住有关转义特殊字符的地步,这是有道理的。 – AncientRo

+0

这有一个问题。在网址末尾追加“&0.1234”会导致“未找到”错误,并且不会返回RSS文件。如果我使用“?0.1234”,则在原始帖子中遇到问题,此时网址已经有“?”。 – AncientRo

+0

你应该检查出最后一个正在使用的网址,除非谷歌对你的查询字符串做了一些奇怪的事情,这对我来说毫无意义。我非常怀疑URL的问题是诚实的。你能提供真实的网址吗? – MinusFour

3

你需要使用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