案例说明:通过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参数到服务器端的更多相关文章

  1. ajax传递json参数

    var pros = []; for(var i = 1; i <= 2; i++) { var obj = {}; obj.id = i; obj.age = i*20; pros = pro ...

  2. Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据、Ajax文件上传)

    form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multi ...

  3. ajax 传递数组参数

    一.ajax 传递数组参数 需要添加: traditional: true, let typeIDArr = [,,,,,]; var that = this; var url = '@Url.Act ...

  4. Ajax传递json数据简介和一个需要注意的小问题

    Ajax传递json数据 Ajax操作与json数据格式在实际中的运用十分广泛,本文为大家介绍一个两者相结合的小案例: 项目结构 我们新建一个Django项目,在里面创建一个名为app01的应用: p ...

  5. 用ajax传递json,返回前台的中文乱码问题

    java项目中用ajax传递json,返回前台时中文出现问号(乱码问题)的解决办法 首先看一下没有解决前的状态: 我用的框架是ssm,在springMVC中我配置了编码格式为utf-8,每个jsp页面 ...

  6. boke例子: freermarker:在使用ajax传递json数据的时候多出冒号

    boke例子: freermarker:在使用ajax传递json数据的时候多出冒号 json数据是用JSON.stringify()格式化的数据,然后用ajax传递,发现数据多出一个冒号:, 后来度 ...

  7. Ajax传递的参数如何在浏览器中查看

    如图当需要在浏览器中知道Ajax传递的参数可以,点击浏览器的右键检查,点击XHR,此时要记得提交带有参数的Ajax页面, 这样才可以显示出来传递的参数

  8. jq ajax传递json对象到服务端及contentType的用法

    目录 0.一般情况下,通过键值对的方式将参数传递到服务端 1.ajax 传递复杂json对象到服务端 2.content-Type 对asp.net mvc项目的重要性 0.一般情况下,通过键值对的方 ...

  9. ajax传递array参数

    var ticketId = new Array(); for(var i = 0; i < checkboxes.length; i++) { ticketId.push(checkboxes ...

随机推荐

  1. ubuntu 14.04安装nginx+php+mysql

    前段时间的折腾,颇费一番周折,过程中发现网上的许多资料比较老旧过时了,所以在这里也简单把过程重新整理一遍,争取一帖解决问题. 基于最新的Ubuntu 14.04(2014年9月)搭建nginx.php ...

  2. json loads No JSON object could be decoded 问题解决

    今天自己用json的 dumps生成的 json 文本: f2=open(filename,'w')f2.write(json.dumps(c) f=open(filename,'r')r= f.re ...

  3. AutoLearnSkills.lua --升级自动学习技能

    --[[作者信息: Auto Learn SKills (升级自动学习技能) 作者QQ:247321453 作者Email:247321453@qq.com 修改日期:2014-3-12 功能:在玩家 ...

  4. mysql学习之触发器

    在借阅表和读者表当中存在着这样的关系,如果在借阅表当中添加一条数据,读者表当中对应的累计借书字段就自增1,如果在借阅表当中删除一条数据,读者表当中对应的累计借书字段就自减1,实现本功能的方法如下. 1 ...

  5. js判断浏览器,包括Edge浏览器

    /* * 描述:判断浏览器信息 * 编写:LittleQiang_w * 日期:2016.1.5 * 版本:V1.1 */ //判断当前浏览类型 function BrowserType() { va ...

  6. 安装oracle数据库,登录 时无法连接目标机

    oracle11g 在dos命令里输入输入sqlplus 输入如用户名: 输入口令: 还是无法连接 解决办法: 输入sqlplus/nolog按enter键再输入conn/as sysdba就好了

  7. Head First 设计模式之命令模式(CommandPattern)

    前言: 本章会将封装带入到一个全新的境界,把方法调用封装起来.通过封装方法调用,把运算块包装成形.调用此运算的对象不需要知道事情是如何进行的,只要知道如何使用包装形成的方法来完成它就ok了. 1 现实 ...

  8. 有wsdl地址生成客户端调用

    新建Java Project 1.项目名称:HelloWorldClient 2.建好的项目 3.生成客户端 选择HelloWorldClient 填写wsdl地址(参考:myeclipse构建web ...

  9. [zz] ROC曲线

    wiki https://zh.wikipedia.org/wiki/ROC%E6%9B%B2%E7%BA%BF 在信号检测理论中,接收者操作特征曲线(receiver operating chara ...

  10. ajax请求获取的数据无法赋值给全局变量问题总结

    一.总结: 1.问题描述: 今天做项目遇到在用表单显示详细信息的过程中ajax请求获取的数据无法赋值给全局变量的情况,从列表页面进入详情页,在详情页面被渲染了之后就会调用js文件里的接口向服务器请求数 ...