这是一个易于理解的问题,我会一步一步地解释清楚。
我正在使用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网址中使用上述内容,则不再绕过缓存:
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”网址的一部分而不是整个网址的一部分?
答案 0 :(得分:5)
你需要像这样使用"Failed to retrieve data for this request. unknown property IsMemoryOptimized"
:
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);

您正在转义本来会被视为网址一部分的特殊字符。
追加或创建queryString:
<pre id="results"></pre>
答案 1 :(得分: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