2015-09-26 7 views
2

Это простой для понимания вопрос, я объясню шаг за шагом, чтобы все было ясно.Параметр URL-адреса в другом URL-адресе

Я использую API фида Google для загрузки файла RSS в мое приложение JavaScript.

У меня есть настройка обхода кеша Google, если это необходимо, и я делаю это, добавляя случайное число в конце ссылки на файл RSS, которую я отправляю в API фида Google.

Например, предположим, что это ссылка на RSS:

http://example.com/feed.xml 

Чтобы обойти кэш, я прилагаю случайное число в конце в качестве параметра:

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

в целом URL для фидов API Google будет выглядеть следующим образом, где «д» является выше ссылка:

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 URL Google, он больше не обходит кэш:

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-адреса?

ответ

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.

Чтобы добавить или создать строку запроса:

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» в конце URL-адреса дает ошибку «не найден», и файл RSS не возвращается. Если я использую «0.1234», я сталкиваюсь с проблемой в исходном сообщении, когда URL уже имеет «?». – AncientRo

+0

Вы должны проверить последний используемый URL, если только Google не делает что-то странное с вашей строкой запроса, которая не имеет для меня никакого смысла. Я очень сомневаюсь, что проблема заключается в том, что URL-адрес будет честным. Не могли бы вы предоставить реальный 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 

 Смежные вопросы

  • Нет связанных вопросов^_^