如何通过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内容?的主要内容,如果未能解决你的问题,请参考以下文章

Ajax发送和接收请求

Ajax相关(原生ajax,jQuery中ajax,axios)

如何通过ajax请求将字符串与文件一起发送到php文件?

JS583- 如何防止重复发送ajax请求

如何防止重复发送ajax请求

学习AJAX必知必会~Ajax基本使用,设置请求行请求体请求头,服务端响应JSON数据