Как правильно избежать HTML, отправленного как данные в функции jQuery .ajax

ОБНОВЛЕНИЕ : Как только я посмотрел на проблему в Firebug, я сразу обнаружил свою ошибку. И это была досадная двойная кавычка, которую я, должно быть, как-то удалил. Я использовал окно разработчика Chrome. Очень извиняюсь за использование ваших ресурсов. Но урок усвоен! ("Надеюсь.)

Как мне лучше всего избежать символов HTML, которые я хочу отправить на свой сервер? Я использую jQuery, .ajax () и jsonp.

Я пишу букмарклет, который отправляет части html текущей страницы на мой сервер. Вот вызов ajax:

jQuery.ajax({
    url: 'http://www.my_server.com/file.php?callback=?',
    dataType: 'jsonp',
    data: { someHtml: escape(jQuery(this).html().substring(0,1000)) },
    success: function() { // stuff },
    beforeSend: function(xhr) {
                  xhr.setRequestHeader('Content-type','text/html');
                },
    error: function() { // stuff }
});

Мне нужно использовать JSONP, поэтому я не могу использовать POST, и поэтому я усекаю данные html. Все работает если html "хороший", но если он содержит символы, которые не нравятся javascript, то у меня проблемы. Я исправил свою проблему с помощью escape (), но теперь мне кажется, что у меня проблемы с новой строкой и табуляцией.

Консоль разработчика Chrome выдает ту же ошибку:

Uncaught SyntaxError: Unexpected token <

, что, как я полагаю, означает, что какой-то символ вызывает нарушение работы javascript. Я пробовал следующее: escape (), encodeURI / Component (), serialize (), text (), но пока ничего не помогло. Сначала я не использовал beforeSend, но подумал, что стоит попробовать, но никакой разницы.

В настоящее время я застрял с некоторым html, в котором есть разрыв строки, затем табуляция, а затем пара пробелов. Я попытался заменить эти символы с помощью replace ():

... .substring(0,1000).replace(/(\r\n|[\r\n])/g,'')

Я нашел эту строку регулярного выражения на другом сайте, который должен заменить различные комбинации возврата каретки и перевода строки.

Надеюсь, я достаточно ясно объяснил себя. Это мой первый вопрос в Stack Overflow, так что не беспокойтесь. :)

8
задан SeanO 8 November 2010 в 12:54
поделиться