原生态ajax 传递json参数到服务器端
案例说明:通过ajax将用户名和密码以json形式传递给服务器端,然后服务器端接受数据,进行处理返回json数据到前端
首先,在客户端,通过JavaScript脚本将页面表单数据封装成JSON格式。LoginAjax()函数完成了这一功能。然后我们通过ajax将数据发送到服务端的login.ashx。其中用到了JSON.stringify()方法,它可以将客户端发送的JSON数据对象进行序列化操作,详细的内容可以看这里https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
//通过ajax调用后台服务端程序,进行数据校验
function LoginAjax(accountName, password) {
var httphtml; if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
httphtml = new XMLHttpRequest();
} else {
// code for IE6, IE5
httphtml = new ActiveXObject("Microsoft.XMLHTTP");
} if (!httphtml) {
alert("httphtml异常");
returnfalse;
}
//将账户名和密码进行编码传递,放置数据乱码 //方法一,通过问号传递
// httphtml.open("POST", "Login.ashx?accountName=" + encodeURI(accountName) + "&password=" + encodeURI(password), false);
var postData = { "accountName": accountName, "password": password };
//异步 - True 或 False?
httphtml.open("POST", "Login.ashx", true);
httphtml.onreadystatechange = function () { /*
存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。
0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 请求处理中
4: 请求已完成,且响应已就绪
*/
if (httphtml.readyState == 4) {
/*
200: "OK"
404: 未找到页面
*/
if (httphtml.status == 200) {
//将ajax请求处理后返回的值显示出来
var value = httphtml.responseText;
//函数eval对json格式字符串进行反序列化操作。
var obj = eval("(" + value + ")");
if (obj.state == "1") {
alert(obj.msg);
}
else {
alert(obj.msg);
} } else {
alert("ajax请求错误!");
}
} }
//有两种办法处理:第一种方式是 用来将对象序列化为JSON字符串(JSON.stringify()), //第二种方式是直接用双引号包裹起来,比如data: "{'accountName':'foovalue', 'password':'barvalue'}"。
var data = JSON.stringify(postData);
//将请求发送到服务器。参数string仅用于POST请求;
httphtml.send(data);
}
Login.ashx服务端接收返回
/// <summary>
/// Login 的摘要说明
/// 用户名默认 admin
/// 密码默认 123456
/// </summary>
public class Login : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
var data = context.Request;
var sr = (new StreamReader(data.InputStream)).ReadToEnd();
var javaScriptSerializer = new JavaScriptSerializer();
User PostedData = javaScriptSerializer.Deserialize<User>(sr); string returnValue = "error";
//校验用户名和密码是否为空
if (!string.IsNullOrEmpty(PostedData.accountName) && !string.IsNullOrEmpty(PostedData.password))
{
//
//备注:通过ajax传递参数进行编码方式乱码
//将获取的值进行解码
string accountName = PostedData.accountName;// System.Web.HttpUtility.UrlDecode(context.Request["accountName"].ToString());
string password = PostedData.password;// System.Web.HttpUtility.UrlDecode(context.Request["password"].ToString());
if (!accountName.Equals("admin"))
{
returnValue = "{\"state\":\"0\",\"msg\":\"账号不正确\"}"; //"账号不正确!";
}
else if (!password.Equals(""))
{
returnValue = "{\"state\":\"0\",\"msg\":\"密码不正确\"}"; //"密码不正确";
}
else
{
returnValue = "{\"state\":\"0\",\"msg\":\"恭喜你,登录成功\"}"; ;
}
}
context.Response.Write(returnValue);
} public bool IsReusable
{
get
{
return false;
}
}
}
public class User {
public string accountName { get; set; }
public string password { get; set; }
}
原生态ajax 传递json参数到服务器端的更多相关文章
- ajax传递json参数
var pros = []; for(var i = 1; i <= 2; i++) { var obj = {}; obj.id = i; obj.age = i*20; pros = pro ...
- Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据、Ajax文件上传)
form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multi ...
- ajax 传递数组参数
一.ajax 传递数组参数 需要添加: traditional: true, let typeIDArr = [,,,,,]; var that = this; var url = '@Url.Act ...
- Ajax传递json数据简介和一个需要注意的小问题
Ajax传递json数据 Ajax操作与json数据格式在实际中的运用十分广泛,本文为大家介绍一个两者相结合的小案例: 项目结构 我们新建一个Django项目,在里面创建一个名为app01的应用: p ...
- 用ajax传递json,返回前台的中文乱码问题
java项目中用ajax传递json,返回前台时中文出现问号(乱码问题)的解决办法 首先看一下没有解决前的状态: 我用的框架是ssm,在springMVC中我配置了编码格式为utf-8,每个jsp页面 ...
- boke例子: freermarker:在使用ajax传递json数据的时候多出冒号
boke例子: freermarker:在使用ajax传递json数据的时候多出冒号 json数据是用JSON.stringify()格式化的数据,然后用ajax传递,发现数据多出一个冒号:, 后来度 ...
- Ajax传递的参数如何在浏览器中查看
如图当需要在浏览器中知道Ajax传递的参数可以,点击浏览器的右键检查,点击XHR,此时要记得提交带有参数的Ajax页面, 这样才可以显示出来传递的参数
- jq ajax传递json对象到服务端及contentType的用法
目录 0.一般情况下,通过键值对的方式将参数传递到服务端 1.ajax 传递复杂json对象到服务端 2.content-Type 对asp.net mvc项目的重要性 0.一般情况下,通过键值对的方 ...
- ajax传递array参数
var ticketId = new Array(); for(var i = 0; i < checkboxes.length; i++) { ticketId.push(checkboxes ...
随机推荐
- Ubuntu下安装boost
今天开始安装配置Ubuntu开发环境(Ubuntu 12.04).在干活之前就预计到会遇到很多问题,但是没想到一开始就卡壳,可能是linux中各种包的依赖关系太复杂了,决定写个帖子记录一下,免得以后再 ...
- React组件性能优化
转自:https://segmentfault.com/a/1190000006100489 React: 一个用于构建用户界面的JAVASCRIPT库. React仅仅专注于UI层:它使用虚拟DOM ...
- LeetCode-Search in Rotated Sorted Array
Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...
- Perl/Nagios – Can’t locate utils.pm in @INC
While trying to use a Nagios plugin I got an error saying that “Can’t locate utils.pm in @INC”. Foll ...
- Web前端MVC框架
MVC: 模型层(model).视图层(view).控制层(controller) Model:即数据模型,用来包装和应用程序的业务逻辑相关的数据或者对数据进行处理,模型可以直接访问数据. View: ...
- ANDROID学习之路 转
版权声明:本文为 stormzhang 原创文章,可以随意转载,但必须在明确位置注明出处!!! 这篇博客背后的故事 一路走来很不容易,刚好知乎上被人邀请回答如何自学android编程, 就借这个机会在 ...
- Ubuntu16.04 安装配置Caffe
Caffe已经是第三次安装配置了,为什么是第三次呢?因为我实在是低估了深度学习对于硬件的要求.第一次我在自己笔记本上配置的单核,CPU only ... 结果是,样例数据跑了4小时,这还怎么玩?第二 ...
- Ionic页面加载前 ionic页面加载完成 ionic页面销毁执行的事件
ionic 中$ionicView.beforeEnter(页面刚加载前) $ionicView.afterEnter (页面加载完成) $destroy(页面销毁) 广播事件 //ionic c ...
- CSS 伪类 (Pseudo-classes)
CSS 伪类用于向某些选择器添加特殊的效果. CSS 伪类 (Pseudo-classes)实例: 超链接 本例演示如何向文档中的超链接添加不同的颜色. 超链接 2 本例演示如何向超链接添加其他样式. ...
- 免费提供UG、ProE二次开发、定制化开发服务
免费提供UG.ProE二次开发,定制开发服务. 拥有六年UG.ProE二次开发经验,相关项目经验. 从事过智能设计.计算机图形学相关研究. 联系方式: QQ:1787326383 微信号:begtos ...