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

CDN, на которую я переключаюсь, взимает плату за запрос типа контента text / html (включая запросы AJAX), поэтому я конвертирую как можно больше запросов ajax из этого типа контента.

Многие измои запросы ajax возвращают HTML.Каков был бы самый простой / лучший способ передать это содержимое, но без типа содержимого text / html?

Мне известны два варианта, но настороженно относятся к:

text / 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.


Есть ли какой-либо подход или тип содержимого, который может получитьот необходимости экранировать специальные символы, не рискуя браузерами иметь проблемы с типом контента?

Спасибо

Ответы [ 3 ]

1 голос
/ 14 апреля 2011

Я : Вы не можете просто изменить тип контента, но оставить его неизменным?

Запрашиваемая : Не приведет ли это к ошибкам? Как текст / javascript, это может вызвать ошибки javascript, не так ли?

Я : Кто будет жаловаться? javascript не выполняется сам по себе, просто потому, что существует как «text / javascript». Javascript выполняется, когда он находится в теге script на странице, или фактически выполняется из другого запущенного javascript. Поэтому я считаю, что если вы просто запросите данные, независимо от типа mimepe, они не будут проанализированы или выполнены, если вы не передадите их через что-то, что пытается это сделать.

Аскер : Дэвид, ты прав. Сейчас я конвертирую их в текст / открытый текст, чтобы быть в безопасности. Пока что, похоже, никаких других изменений не требуется, что делает это самым простым способом сделать это.

0 голосов
/ 14 апреля 2011

Как расскажет Расс Брэдберри, я бы тоже пошел с JSON. вам не нужно экранировать строку вручную, вы можете использовать API, например

json.net или

DataContractJsonSerializer к этому для вас.

0 голосов
/ 14 апреля 2011

Я бы лично пошел с подходом 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);
}
...