如何通过ajax请求发送html内容?
Posted
技术标签:
【中文标题】如何通过ajax请求发送html内容?【英文标题】:How to send html content through ajax request? 【发布时间】:2011-04-14 01:05:25 【问题描述】:我有一个带有 textarea (tinymce) 的表单,用于输入内容。当我执行 ajax 请求时,我得到了错误:
一个潜在危险的 Request.Form 从客户端检测到值
然后我尝试了类似的东西
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 页面,但问题仍然存在。
感谢任何帮助!
【问题讨论】:
【参考方案1】:$.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,您将 need to add 将以下内容添加到您的 web.config:
<httpRuntime requestValidationMode="2.0" />
【讨论】:
我也猜到了,所以我尝试对 html 内容进行编码,但仍然一无所获~.~ 你不需要编码任何东西。如果您使用data
散列发送参数,jQuery 将负责编码。
你能给我一个例子或链接到 tut 吗?非常感谢!
什么教程?你试过我的建议了吗?
你是否在服务器端禁用了输入验证?如果是,你是怎么做的以及具体做了什么?您使用的是什么版本的框架?【参考方案2】:
在我看来,另一个有效但缓慢的替代方案是对 HTML 字符串进行 base64 编码。 我使用了 jQuery 的 base64 扩展:
var html = ...my html unsafe text...
var encodedHtml = $.base64.encode(html);
【讨论】:
这太酷了 :) 否则序列化会越来越麻烦谢谢大家 只用btoa()
编码,atob()
解码。 developer.mozilla.org/en-US/docs/Web/API/…以上是关于如何通过ajax请求发送html内容?的主要内容,如果未能解决你的问题,请参考以下文章