1.layui下载及导入
根据步骤即可
加载样式:
<script>
layui.use(['element', 'layer', 'util'], function () {
var element = layui.element;
var layer = layui.layer;
var util = layui.util;
var $ = layui.$;
});
</script>
传值:
<script>
layui.use(function(){
var form = layui.form;
var layer = layui.layer;
// 提交事件
form.on('submit(demo-login)', function(data){
var field = data.field; // 获取表单字段值
// 显示填写结果,仅作演示用
layer.alert(JSON.stringify(field), {
title: '当前填写的字段值'
});
// 此处可执行 Ajax 等操作
$.ajax({
type: "post",
data: {
'kglx': field
},
url: "http://localhost:25034/Home/Login2",
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("执行失败了!");
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert("textStatus");
},
success: function (data) {
alert("成功啦?");
}
});
return false; // 阻止默认 form 跳转
});
</script>
2.mvc
传值:
public ActionResult Login2(string username,string password)
{
Console.WriteLine(username + password);
if (username=="12"&&password=="1234")
{
return Json(new
{
Sucess = true,
Message = "登录成功"
}, JsonRequestBehavior.AllowGet);
}
return View();
}
3.问题
1. System.InvalidOperationException: 此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站。若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet。
解法:
原文链接:解决"此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站"的问题 - 五粮液和 - 博客园 (cnblogs.com)
其实从返回的这个错误信息我们已经可以知道解决方法了,看这个信息:”因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站“,说明我们只要使用POST请求就可以了。后面的 “若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet”,这是提示第二种解决方法,就是设置JSON结果对象使其允许来自客户端的 HTTP GET 请求。以下为具体解决方法:
方法一 使用POST请求来调用控制器,从而获取JSON数据
原来发送ajax请求的前台JS代码如下:
/*可以看到type 设置的是GET请求*/
$.ajax({
type:'GET',
url: '/Home/AjaxGetJsonData',
success: function (data) {
alert(data);
},
error: function (error) {
alert(error.responseText);
}
});
或者
$.get('/Home/AjaxGetJsonData', null, function (data) {
alert(data);
});
更改为:
/*这里更改了ajax的参数 type 为POST ,发送POST请求就不会报错了*/
$.ajax({
type: 'POST',
url: '/Home/AjaxGetJsonData',
success: function (data) {
alert(data);
},
error: function (error) {
alert(error.responseText);
}
});
或者
/*也可以直接使用$.post方法进行ajax调用*/
$.post('/Home/AjaxGetJsonData', null, function (data) {
alert(data);
});
方法二 在控制器返回的JSON结果对象里,设置JsonRequestBehavior.AllowGet(允许来自客户端的 HTTP GET 请求)
原来控制器中的代码如下:
public ActionResult AjaxGetJsonData()
{
string strData = "测试数据";
return Json(strData);
}
更改后的代码如下 :
public ActionResult AjaxGetJsonData()
{
string strData = "测试数据";
//这里我们设置了第二个参数JsonRequestBehavior为AllowGet
return Json(strData,JsonRequestBehavior.AllowGet);
}
我们可以看到在最后return Json(list, JsonRequestBehavior.AllowGet)中增加了第二个参数JsonRequestBehavior.AllowGet,默认是JsonRequestBehavior.DenyGet。之所以我们要在这里设置允许HTTP GET请求,是因为ASP.NET MVC为了预防一个网站信息泄漏的漏洞,所以默认是禁止客户端的HTTP GET 请求的。这是一个很出名的漏洞,名字是:JSON 劫持漏洞,所以我建议AJAX还是使用POST请求来获取数据,防止重要的信息被恶意攻击者窃取。