#ajax #asp-classic #content-type
#ajax #asp-classic #content-type
Вопрос:
CDN, на который я переключаюсь, взимает плату за запрос текстового / html-типа контента (включая AJAX-запросы), поэтому я конвертирую как можно больше ajax-запросов из этого типа контента.
Многие из моих ajax-запросов возвращают HTML. Какой был бы самый простой / наилучший способ по-прежнему передавать этот контент, но без текстового / html-типа контента?
Два варианта, о которых я знаю, но к которым отношусь настороженно:
текст / javascript
<div class="style1">smdrager's example content</div>
становится
var content = '<div class="style1">smdrager's example content</div>';
Любые одинарные кавычки придется экранировать. Есть ли какие-либо непредвиденные проблемы с передачей контента в простой переменной?
application / json
<div class="style1">smdrager's example content</div>
становится
{"content" : "<div class="style1">smdrager's example content</div>"}
Любые двойные кавычки, которые являются общими, должны быть экранированы. Я чувствую, что это было бы безопаснее, чем переменный подход, но мне придется проделать больше работы, чтобы избежать каждой двойной кавычки, чем одинарной, как при простом переменном подходе.
Редактировать:
Я подумал о третьем варианте, который проще, чем два других. У кого-нибудь есть что-нибудь получше?
прокомментированный javascript
Я подумал об этом:
<div class="style1">smdrager's example content</div>
становится
/*<div class="style1">smdrager's example content</div>*/
Это работает без какого-либо экранирования. Единственное, что нужно изменить в контенте, это удалить любые другие комментарии к блокам javascript, которых в любом случае не должно быть в содержимом ajax’ed.
Есть ли какой-либо подход или тип контента, который может избавить меня от необходимости экранировать специальные символы, не рискуя, что у браузеров возникнут проблемы с типом контента?
Спасибо
Комментарии:
1. Разве вы не можете просто изменить тип контента, но оставить содержимое прежним?
2. Не приведет ли это к ошибкам? Например, как текст / javascript, это может привести к ошибкам javascript, не так ли?
3. Кто будет жаловаться? javascript не выполняется сам по себе, просто он существует как «text / javascript». Javascript выполняется, когда он находится в теге script на странице, или фактически явно выполняется из какого-либо другого запущенного javascript. Поэтому я считаю, что если вы просто запросите данные, независимо от mimetype, они не будут проанализированы или выполнены, если вы не передадите их через что-то, что пытается это сделать.
4. Дэвид, ты прав. Сейчас я конвертирую их в
text/plaintext
на всякий случай. Пока, похоже, никаких других изменений не требуется, что делает этот способ самым простым. Если вы хотите использовать этот ответ, я вознагражу вас щедростью.
Ответ №1:
Я: Разве вы не можете просто изменить тип контента, но оставить содержимое прежним?
Запрашивающий: не приведет ли это к ошибкам? Например, как текст / javascript, это может привести к ошибкам javascript, не так ли?
Я: Кто будет жаловаться? javascript не выполняется сам по себе, просто он существует как «text / javascript». Javascript выполняется, когда он находится в теге script на странице, или фактически явно выполняется из какого-либо другого запущенного javascript. Поэтому я считаю, что если вы просто запросите данные, независимо от mimetype, они не будут проанализированы или выполнены, если вы не передадите их через что-то, что пытается это сделать.
Спрашивающий: Дэвид, вы правы. Сейчас я конвертирую их в текстовый / открытый текст на всякий случай. Пока, похоже, никаких других изменений не требуется, что делает этот способ самым простым.
Ответ №2:
Я бы лично выбрал подход jsonp, в котором отсутствует html.
что-то вроде
someFunc('%3Cdiv%20class%3D%22style1%22%3Esmdrager%27s%20example%20content%3C/div%3E');
тогда в браузере у вас была бы функция:
function someFunc(content){
var el = document.getElementById('myDiv');
el.innerHTML = unescape(content);
}
Комментарии:
1. Экранирование всего моего контента — это не вариант. Это, вероятно, для 30-40 экземпляров ajax’d-контента, некоторые из которых представляют собой приличный объем HTML. Экранирование всего этого (а не смешанного с ним внутреннего кода) заняло бы слишком много времени.
2. вы можете не использовать только кавычки, я просто предпочитаю избегать всего этого, чтобы быть в безопасности.
Ответ №3:
Как предложил Расс Брэдберри, я бы тоже выбрал JSON. вам не нужно экранировать строку вручную, вероятно, вы могли бы использовать API, подобный
json.net или
DataContractJsonSerializer для этого подойдет для вас.
Комментарии:
1. Извините, я должен был уточнить, что это относится к классическому asp. Добавлены теги к вопросу.