Какой самый простой способ отправить html-контент в нетекстовом / html-типе контента для ajax-запросов?

#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. Добавлены теги к вопросу.