Как отправить html контент через ajax запрос? - PullRequest
6 голосов
/ 18 сентября 2010

У меня есть форма с textarea (tinymce) для ввода содержимого. Когда я выполняю ajax-запрос, я получаю сообщение об ошибке:

потенциально опасный запрос. Форма значение было обнаружено с клиента

Тогда я попробовал что-то вроде

html.encodeURIComponent() или escape() но ошибка все еще здесь

HTML:

<form id="editForm" action="" method="post">
  <input type="text" id="title" name="title" />
  <textarea id="content" name="content"></textarea>
  <input type="button" id="submit" onclick="Submit();" />
</form>

Скрипт (я использую jQuery)

function Submit(){
 $.ajax({                
  url: 'ajax.aspx?type=addcontent&' + $('#editForm').serialize() + '&rnd=' + Math.random(),
  success: function(data) {
   alert('OK');
  }
 });
}

Как только я нажимаю кнопку отправки, появляется ошибка. Ajax-запрос не выполняется. Я попытался добавить ValidateRequest="false" на страницу aspx, но проблема все еще здесь.

Любая помощь приветствуется!

Ответы [ 2 ]

8 голосов
/ 18 сентября 2010
$.post('/foo', { htmlContent: '<someHtml/>' }, function(result) {
    alert('ok');
});

Теперь ошибка исходит от серверного скрипта, который не принимает HTML.Движок ASP.NET автоматически отбрасывает любые запросы, содержащие HTML.Существуют различные способы отключить это поведение на свой страх и риск.Один из них состоит в добавлении ValidateRequest="false" к заголовку aspx @Page.

<%@ Page Language="C#" AutoEventWireup="false" ValidateRequest="false" %>

Если это приложение ASP.NET MVC, вы можете украсить действие контроллера, которое вы публикуете, с помощью [ValidateInput(false)] атрибут:

[HttpPost]
[ValidateInput(false)]
public ActionResult Foo()
{
    ...    
}

Также важно отметить, что если вы работаете в .NET 4.0, вам необходимо добавить следующее в вашу сеть.конфиг:

<httpRuntime requestValidationMode="2.0" />
1 голос
/ 10 февраля 2012

На мой взгляд, другой верной, но медленной альтернативой является base64-кодирование вашей HTML-строки. Я использовал расширение base64 jQuery:

var html = ...my html unsafe text...

var encodedHtml =  $.base64.encode(html);
...