【问题标题】:How to send html content through ajax request?如何通过ajax请求发送html内容?
【发布时间】: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 页面,但问题仍然存在。

感谢任何帮助!

【问题讨论】:

    标签: html ajax jquery request send


    【解决方案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);
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 2016-05-22
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多