Javascript 使用ajax请求用html值序列化输入
我使用jquery.ajaxpost使用c#将数据发送到服务器,但它会处理一个错误 这是我的密码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”, 成功:函数(){ 警惕(“成功”); }, 错误:函数(){ 警报(“错误”); }
$(函数(){
$('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标记,然后再执行其余代码。Iphp
所有工作正常,或者在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');
}
});
});
});