Javascript 使用ajax请求用html值序列化输入

Javascript 使用ajax请求用html值序列化输入,javascript,c#,jquery,html,ajax,Javascript,C#,Jquery,Html,Ajax,我使用jquery.ajaxpost使用c#将数据发送到服务器,但它会处理一个错误 这是我的密码 $(函数(){ $('frmSubmit')。关于('submit',函数(e){ e、 预防默认值(); var frm=$(本); $.ajax({ url:frm.attr('action'), 类型:frm.attr('method'), 数据:frm.serialize(), 数据类型:“JSON”, 成功:函数(){ 警惕(“成功”); }, 错误:函数(){ 警报(“错误”); }

我使用jquery.ajaxpost使用c#将数据发送到服务器,但它会处理一个错误 这是我的密码

$(函数(){
$('frmSubmit')。关于('submit',函数(e){
e、 预防默认值();
var frm=$(本);
$.ajax({
url:frm.attr('action'),
类型:frm.attr('method'),
数据:frm.serialize(),
数据类型:“JSON”,
成功:函数(){
警惕(“成功”);
},
错误:函数(){
警报(“错误”);
}
});
});
});

标题:

正文:

提交
您需要在要粘贴到文本区域的HTML文本中使用HTML实体。象

我自己也没用过。但在谷歌搜索之后,我发现在发布之前需要将html文本编码为html实体。有人编写了一些方法来对其进行编码和解码()


希望有帮助。

问题出在服务器端。 如果您使用ASP.NET,它具有内置的请求验证,可以自动帮助您抵御XSS和HTML注入攻击。您的html内容将按此方式处理

有几个选项允许在帖子内容中包含html内容:

  • 使用
    [allowtml]
    属性装饰需要HTML的模型类上的属性

    public class DummyData 
    {
        public string Title { get; set; }        
        [AllowHtml]
        public string Body { get; set; }
    }
    
  • 在接收post数据的方法上添加
    [ValidateInput(false)]
    。下面是ASP MVC控制器的示例:

    [HttpPost]
    [ValidateInput(false)]   
    public ActionResult SaveYourData(DummyData model)
    {
        ...
    }
    
  • 试一试

     <html>
      <head>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> 
    
    
    
      </head>
      <body>
      <form enctype="multipart/form-data" action="/b.php" method="post">
      <input type="text" value="<html>" name="trxid" value="<?=$trx?>">
      <input type="" value="<td>" name="file">
      <input type="button" id="submit_custom" onclick="f(); return false;">
      </form>
      </div>
      </body>
      </html>
    
    
      <script type="text/javascript" src="/js/jquery-1.11.1.min.js"></script>
    
      <script type="text/javascript">
    
      function f(){   
          var frm = $('form');
    
          $.ajax({
            url: frm.attr('action'),
            type: frm.attr('method'),
            data: frm.serialize(),
    
           /* need to be like this */
           processData: false,
           contentType: false,
           dataType: 'JSON',
           /**/
    
            success: function(data, textStatus, jqXHR){
            alert('success');
    
      response = data;
    
      alert('response json value  '+response.a);
            },
            error: function(){
              alert('error');
            }
          });
      }
    
      </script>
    
    
    我成功了

    感谢@Mitch给了我一个使用Ajax其他属性的想法

    HTML:

    如你所见。我将序列化表单替换为
    JSON.stringify(data)
    ,因为我需要从表单获取所有数据并将值转换为JSON字符串,因为
    frm.serialize()
    不允许我用HTML代码输入值。。它给了我一个错误,即在调试会话期间数据没有发送到服务器端


    感谢所有试图解决我的问题的人

    为什么在submit中需要ajax?@user2181397,这有什么不对?@user2181397只需将数据从发件人发送到服务器端(c#)。您的问题中有一个问题
    序列化
    拼写错误<代码>系列化
    ?这是偶然的吗?请发布一个导致问题的示例内容。那可能会有帮助。您好@Dfirmansyah。。我明白你的意思,我认为你的答案将是我的解决方案,但问题是当我调试服务器端时,通过为控制器的特定操作指定断点。。。在调试会话期间,它实际上不会在断点上流动,但ajax告诉我,我在textarea上输入的值一定有问题,即当我输入一些HTML代码时,它会给出一个错误,即使没有在操作上流动,但当我只输入一个普通文本时,调试会话将在断点上流动。。。希望你能理解我…它不会进入你的动作控制器,因为验证是在你的动作方法执行之前执行的。如果我用html代码输入一个值。。。但是如果我在文本区域输入一个普通文本,它就会进入动作控制器……是的,因为普通文本是有效数据,这就是它通过验证并输入动作方法的原因。但html文本被视为潜在的危险数据,因此它会引发验证错误,而不会继续执行操作方法。这里的验证是指由ASP.NET执行的HTTP请求验证,而不是表单输入验证。啊,我知道你是对的,我认为这就是问题所在,但是。。。有没有其他方法可以在文本区域中使用html值绕过错误验证?您的代码有效,问题在于您的服务器或ASP代码或您使用的内容这是一个场景。。。当我使用processData、contentType和JSON数据类型时,frm.serialize()接受普通文本和html代码值,但它向服务器传递空数据,当我排除这两个属性时。。。serialize()接受普通文本,并将完整数据传递给服务器。。。但是用html代码。。。它仍然会给我一个错误,而不会在服务器端流动。。。我尝试了你的所有代码,甚至你上一篇文章,但它只给出相同的输出…:(请尝试
    var postData=new FormData();postData.append('input_name',$('input').val();postData.append('textarea_name',$('textarea').val();
    //更改为输入和textarea的选择器[data=data]。并将post中的serialize替换为
    data:postData,
    您还可以在#c中删除html标记,然后再执行其余代码。I
    php
    所有工作正常,或者在js中修复html标记,然后使用ajax post发送tata,但这并不安全
    <form id="frmSubmit" method="post" action="/announcement/create">
      Title:<br/>
      <input type="text" id="title" name="title" /> <br/>
      Body:<br/>
      <textarea id="body" name="body"></textarea> <br/>
    
      <button type="submit">submit</button>
     </form>
    
    $(function(){
      $('#frmSubmit').on('submit', function(e){
        e.preventDefault();
        var frm = $(this);
    
        data = { 
          title: $("#title").val(),
          body: $("#body").val()
        } 
    
        $.ajax({
          url: frm.attr('action'),
          type: frm.attr('method'),
          data: JSON.stringify(data),
          dataType: 'JSON',
          contentType: 'application/json',
          success: function(){
            alert('success');
          },
          error: function(){
            alert('error');
          }
        });
      });
    });