fq数据格get 方式传递json数据方式都有哪些

数据交互方式_百度知道
数据交互方式
我有一个项目,我想请问以下方式,哪一种效率更高:1、通过webservice,webservice读取数据库,然后然会结果2、预先将数据库中的每一条信息静态化成xml,客户直接下载xml然后本地解析
我有更好的答案
  web数据交互方式,web数据交互,简单的讲,是client与server端的数据交互,通过http协议交互的。  【扩展】  对于小型个人系统,数据量不是很大的都是通过webservice,webservice读取数据库,然后返回结果;对于公司企业的大型数据系统等采用预先将数据库中的每一条信息静态化成xml,客户直接下载xml然后本地解析的数据交互方法。  web数据交互,从server的角度讲:主要有pull,push两个,一个是拉,另外一个是推。  1)pull 是拉,客户端向服务器端主动的拉取数据,采用的技术是ajax 和Xss(跨站脚本)  2)push 是服务器向客户端主动的推动数据,第一种方式是长连接,客户端与服务器之间一直保持着连接,如果有数据的更新,服务器向客户端推送数据,客户端接受服务器端的数据,可以理解为长轮询,客户端与服务器端必须一直是连接着的状态。另外还有一种是伪长链接的。有2种实现方式,一种是基于ajax的,它与传统的ajax的方式不同在于,服务器端会阻塞客户端的请求直到有数据传递或者超时才返回。客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。 当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。
采纳率:75%
来自团队:
数据量小 就第二种 大就第一种要么牺牲性能 要么牺牲内存自己拿捏....
本回答被提问者和网友采纳
感觉第二种效率更高。这个地方就要考虑静态化XML的频率了。望采纳,谢谢。
谢谢你的回答。不过只能选一个答案,不好意思
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。服务端与客户端之间的数据传输格式 - ITeye问答
现在想开发一个android软件,需要服务端与客户端之间传输数据,暂时定的是客户端通过uri的方式访问服务端的数据,为了减少用户的流量,传输数据格式为json,但是考虑到以后可能会开发iphone或是nokia或是别的手机客户端,不知道我这种方法合适吗?或者还有别的好方法吗?问题补充fandayrockworld 写道嗯,uri的方式可行,很多应用的交互都是这么做的,简单的restful风格,灵巧不笨重,且与平台无关,只需支持http协议。
在进行网络操作的时候,在实际应用中是否需要进行异步处理呢?
多平台的话,省事一点,可以考虑PhoneGap:http://www.phonegap.cn/
如果原生的去做的话,可以采用http的方式异步处理。
已解决问题
未解决问题对于 restfulAPI,一般如何选择交换数据的格式呢?
08:31:19 +08:00用 iPad 发布 · 7664 次点击
主要想请教类似 a=1&b=2 和{ a : 1 , b : 2 }这两种的区别
第 1 条附言 &·&
09:53:02 +08:00
使用场景: web 单页应用
返回数据用 json 没疑问,问题在 post 某个数据时有这两种做法。
我认为应该传 json ,这样收发数据统一,传递时也不用转换,另一种观点认为应该用 a=1&b=2 这种,有两个理由: 1 、比较省流量 2 、发或修改数据一般比较简单,完全可以表达
64 回复 &| &直到
10:49:53 +08:00
& & 08:55:57 +08:00 via Android
通常用 json
& & 08:56:33 +08:00
这是什么意思?不是 GET 和 POST 吗?
& & 08:57:09 +08:00
如果是 GET 请求,请求参数要在请求地址后&http://ip:port/doman?a=1&b=1&c=1&
如果是 POST 请求,而且交互使用 JSON 数据格式的话,参数传递会是这样的&{a:1,b=2,c=3,...}&
& & 09:22:22 +08:00
get
a=1&b=2&arr[]=3&arr[]=4
post
{
a:1,b:2,c:[3,4]
}
& & 09:24:52 +08:00
POST 传出去不还是 a=1&b=c
除非你是自定义的 value 值是 json 格式比如 a=1&b=%7Bc%3A%205%7D
& decodeURIComponent ('%7Bc%3A%205%7D')
& &{c: 5}&
& & 09:32:03 +08:00
json ,感觉已经成为标准了
& & 09:33:13 +08:00
json 已经是事实上的标准了
& & 10:00:16 +08:00
JSON 几乎作为标准存在了,虽然数据量会大一些
& & 10:04:03 +08:00
相关的帖子
Json VS Protobuf
IOS 开发怎么处理数据类型问题?
为什么……不拿另一个 HTTP 服务器来当作数据库来给一个 Web App 使用?
& & 10:08:42 +08:00
不管你提交是否是 JSON ,转换总是需要的,特别是提交数据肯定是需要经过服务器端校验和安全处理的。
而且大多时候提交的数据又不是直接丢数据库去储存的,增删查找需要的字段,和返回的结果本来有些时候就相差甚远,处理逻辑也完全不一样,没必要强行 JSON 格式。
& & 10:15:40 +08:00
@ 我说的转换是指这两种字符串能表达的数据结构是等价的,如果只有一种,只需要在一种交换数据和程序变量之间转换。我没有说一定要用什么,只是想知道请教下是否有区别,以及各自的利弊又是什么?
& & 10:23:26 +08:00
@ 感觉都浪费在双引号上了
& & 10:33:15 +08:00
@ ”如果是 GET 请求,请求参数要在请求地址后&http://ip:port/doman?a=1&b=1&c=1& “ 这个似乎不是很符合 RESTful 的建议吧
& & 10:36:19 +08:00
json ,事实标准
& & 10:40:55 +08:00
用 JSON 构建 API 的标准指南
& & 10:46:29 +08:00
@ 首先搞清楚什么是 REST 。
InfoQ 上有 Fielding 博士的原始论文的中文翻译版本。
广泛的讲 REST 不限于 HTTP 协议,数据交换格式可以是文本也可以是二进制。狭义的讲,我们通常将 REST 限于 HTTP , JSON 是取常用的数据交换格式, XML 也没问题。
REST 的几个要素:
1. 用一个唯一的 URI 代表资源的定位
2. 用 HTTP 语义( GET , POST , PUT , PATCH , DELETE , HEAD , OPTION 等)操作资源
3. 用 HTTP 状态标志操作结果
常用的 CRUD REST API 可以这样设计:
比如常见的 BLOG 程序,定义一个 /posts 入口。
取得所有 POST ,结果是一个 [{},{}]数组,可以接查询参数?page=XXX 等,返回 200 状态。
/posts
发布新 POST , Request Body 为{title:&text&, body:&test body&}, 返回 201 状态。
/posts /{id},
取得所有单个 POST , URI 需要接 id, 成功返回 200 状态,失败 404 。
/posts /{id} , PUT ,
更新 POST , Request Body 为{title:&text&, body:&test body&}, 返回 204 状态。
/posts /{id} , DELETE ,
删除 POST , 成功 返回 204 状态。
/posts 是对资源集合操作,/posts/{id}对单个资源操作。操作的结果有的有返回数据,更直接的表达结果是 HTTP Status 。
我写的简单的例子,
这个例子,目前没写任何 Notes 来描述。
要了解 REST API 实现,可以看另外一个类似的例子
, 这个项目的 WIKI 上的详细介绍。
@ 从 REST API 设计角度,你的问题和 REST 一点关系都没有。从设计上角度,查询数据?a=1 仅适用条件过滤,也就是上面第一个 /posts GET 方式。
另外,关于 REST API 设计好坏,有一个 Rechardson 成熟度模型来衡量。它定义了三个级别。国内几个一线大公司的 API 基本都是 Level 0 , 按这个标准衡量来讲,都不是 REST API ,虽然他们 Developer 网站都喜欢写上 REST 的字样。反而一些不大的公司做得不错,比如 JPUSH 等。
当我们考虑 Level3 ( Self-document, Self-Discovery ) 的时候,在交换格式上就有很多细节要去实现。这方面有一些行业标准或者正在标准化的交换格式。
如: HAL , Collection+JSON , JSON API 。
& & 10:51:09 +08:00
@ GET 是用于查询操作,是可以使用 query parameters 的。
& & 10:52:31 +08:00
@ JSON API 目前应用范围不广,不如 HAL 流行, Spring 目前只支持 HAL 。
& & 10:52:57 +08:00
取就用 get+query
增删改就用 POST DELETE PUT + json body
& & 11:06:18 +08:00
@ 博士的论文我翻过几次,我知道数据交换并不是 rest 的主要关注点,只要想请教下在实际的做法以及如何取舍,感谢分享~
& & 11:12:24 +08:00
@ 我上面两个链接的例子中 UI 全部是 SPA 。
& & 11:28:38 +08:00
直接 command_json , sign 。
a=1&b=2 这种做 hash 签名容易被坑死。
& & 11:48:05 +08:00
@ 没太明白,能再具体解释下吗:)
& & 11:56:21 +08:00 via Android
如果省流量你考虑进去,这问题就没必要讨论了。
hash 你后面掉坑就知道了。
& & 12:08:29 +08:00
@ 清楚利弊,在具体情况下就好取舍了吧;能描述下这个坑的大小、颜色、气味吗?以免掉下水道里,哈哈~
& & 12:31:24 +08:00
比如一些 http 请求为了安全需要做 hash 签名, a=1&b=2 这种签名会碰到很多坑。
看一下这个 hash 签名设计:
```
因此我初步设计了一个签名机制,步骤如下:
将时间戳,随机串, TokenID ,和业务逻辑关键参数构成一个字典
将字典按照 Key 升序排序,然后按照 key1 value1 key2 value2 拼成一个连续字符串
将 Path 拼在前面, Token 拼在后面
将整个字符串做 SHA256 ,作为一个参数放回到请求中
服务器端接收到请求的时候也进行同样的处理,进行签名验证。
如果你曾经裸写过常见的第三方服务 API 调用的话,你会对这些步骤非常熟悉。
```
如果直接传递 json 字符串,直接 hash json 字符串即可,不用麻烦的拼接了。
& & 12:47:19 +08:00
@ 只理解到处理方式的差别,没看到坑
& & 12:48:48 +08:00
还是统一用 JSON 好些吧,用 Form 提交的话,多层数据怎么办?
& & 12:49:53 +08:00
都支持就好了
& & 12:55:41 +08:00
@ 这样只是把问题抛给了调用接口方吧
& & 12:56:33 +08:00
@ 难道不用 HTTPS 吗?签名这东西,看着就吐,根本谈不上安全,如果你的 Token 被截取(没 HTTPS 所有数据传输都透明), Hacker 构造你这样顺序的签名有什么难的。这也是 oAuth2 去掉了签名,强制使用 HTTPS 的原因。
& & 12:59:30 +08:00
比如 PHP :
& & 13:00:14 +08:00
不是取决于 Accept 头的么……
& & 13:04:40 +08:00
@ 哦没看清附言……
主要看你的 spa 框架……比如 angular 默认 post 是 json ……
总之怎么方便怎么来
& & 13:20:46 +08:00
这个取决于你的操作吧。 GET 获取数据,可以用 urlencode 传参。 POST 用于更改数据,传 json 更合适吧。
& & 13:38:39 +08:00
@ 如果接口是不同的人在写,那还要看是谁方便,有一套参考的规范会更好吧
& & 13:41:51 +08:00
统一 HTTP POST , json 数据格式,客户端和服务端都好写,加解密也好做
& & 14:04:11 +08:00
不是啊,对于指定参数的 GET 请求时这么做的。
比如这样:
@ (&findById&)
public String findById (@QueryParam (&id&)String id );
& & 14:09:02 +08:00
@ 没看懂,╮(╯▽╰)╭
& & 14:26:06 +08:00
@ 最后当然要统一了……之前先做好协定。
比如有 angular,superagent 之类的场合我倾向于使用 json
有些时候框架搭配用 jquery 发请求那就用 form-urlencoded.
总体而言就是怎么方便怎么来
————
实在决定不了么
来局昆特牌吧
& & 14:28:20 +08:00
@ 你需要保证前后端的排序、编码等是一致的。记得有一篇 API 文档提到过,个别语言的排序和 API 服务器不一致,需要特殊处理。
即使上了 https ,我也会利用类似签名的方式而不会直接传递 API 密钥做身份认证的。例如目前对于设备的认证就是设备注册时分配一个 id 及密钥,每个请求都会被 hash 签名。密钥只会在设备注册时传递一次,之后不会传递,这个风险还是可以接受的。由于密钥不像密码,更换麻烦,后期即使加上 https ,也不会直接传递密钥。
& & 14:30:22 +08:00
json 适合用来描述复杂的数据格式
如果只是简单的数据,用哪个都无所谓
还是要从实际出发,比如有的接口是要传文件的,用 json 就不合适了
& & 14:32:50 +08:00
@ 支持两种方式的话,就没有问题了呀。
调用方怎么都不会错,怎么叫推给他们。
& & 14:39:39 +08:00
楼上说什么 JSON 是事实标准的说法有点问题,
application/x-www-form- 也是标准啊。
按 REST 来说,根据 Content-Type 的值为 application/x-www-form-urlencoded 还是 application/json 做下判断就好了。
& & 15:54:58 +08:00
@ 我的意思不是把麻烦推给他们,是把分析两种方式的利弊推给了他们;在接口方,我倾向在理想情况把一种实现好,毕竟现实中资源和精力是有限的;同意都是标准的说法,但是事实标准是可能存在的。
& & 15:56:50 +08:00
@ 你可以用 payload 的方式传数据
& & 16:05:30 +08:00
@ 有时候确实会遇到自己难以决定或者双方难以一致的问题,这时候我的态度就先实现一种(直觉有时候也管用),在使用经验增长之后,答案自然就有了。 ps :突然想到“约定大于配置”。
& & 16:10:06 +08:00
@ 文件确实特殊;一个项目中应该都有复杂点的数据,统一的约定还是挺重要的吧
& & 16:12:49 +08:00
@ hash 时 json 字符串中的顺序也需要注意吧
& & 16:13:55 +08:00
@ 一直没太明白设计这个的目的
& & 16:50:20 +08:00
@ 客户端是对序列化后的字符串签名,服务端是先验证签名后反序列化,所以不涉及 key 顺序的问题。
& & 17:12:29 +08:00
@ 也见过接口的字符串签名算法,其实也可以按 json 这种,不明白为什么要排序:)
& & 17:34:22 +08:00
我觉得没必要 2 选 1 的,两种同时存在是 OK 的,也是更为常见的。
& & 17:44:34 +08:00
两种可以同属存在。不同的压缩方式,在 accept 中设置即可
& & 17:54:43 +08:00
@ 那就 json 吧,适配性好一点,扩展也方便
& & 17:58:23 +08:00
@ 一些 oAuth2 provider 提供了 JWT 支持, 连接的时候使用, Spring 内置了支持(只需要设置)。其他情况真的没看到签名的使用。国内 X 宝 X 度通篇的 Sign ,除了让 API 看起来像屎一样,如果它的加密方法和顺序被预先知道了,我不觉得是安全的。
如果你想做所有请求还要加密, X509 应该可以了吧。我想只有银行级的安全才会有这种要求。
& & 18:16:12 +08:00
两个尖括号的流量也省。。。。。
& & 18:23:41 +08:00
@ 对于用户量亿级的服务,还是有大差别的吧
& & 18:23:42 +08:00
@ content-type 不一样
& & 20:28:16 +08:00
@ 针对 Mobile 原生程序(比如 Android , IOS )的某些场合可以绕开 HTTP ,特别图片等数据量大的东西,使用更底层的协议通讯,效率更高。其它文本类的,全部用 JSON ,所有平台都通用。
其实, REST API 的设计,只要参考 Github API , 或者 Heroku 的 API 就好了。设计好的 API ,从根到底下资源是一个树型结构,如 / 是根, /posts 是 Post 资源集合, /posts/2 是 ID 为 2 的单个资源,/posts/2/comments ,是指 ID 为 2 的 Post 下面的所有 Comments 。如果使用 HAL , 从根开始添加一些必要的 metadata 信息, 下面的所有的资源都应该是可以 Discovery 的,使用 HAL Browser 这样工具是可以可视化整个 API 结构,而不需要借助文档说明。
& & 09:08:38 +08:00
@ web 单页应用直接 form data 不好么。
& & 09:57:49 +08:00
@ 不是不好,而是根据你们自己的需求自己定义,你这边以 form 格式传后台就以 form 格式接收并转换,用 json 的好处就是如果你的后台用的是类似 node 这样天生支持 json 数据的,那么就无需转换了。
& & 10:48:20 +08:00
@ 我再补充一下, REST 还要注意状态转移和等幂性
& & 10:49:53 +08:00
@ 多谢,我之前还没看到任何标准和参考说道到这个是可以的,反倒刻意去回避这个
& · & 1819 人在线 & 最高记录 3541 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.1 · 21ms · UTC 13:41 · PVG 21:41 · LAX 06:41 · JFK 09:41? Do have faith in what you're doing.网站已改版,请使用新地址访问:
fq 飞Q的linux下简单实现,可是 文件传输等 功能 -Unix program 238万源代码下载- www.pudn.com
&文件名称: fq
& & & & &&]
&&所属分类:
&&开发工具: Windows_Unix
&&文件大小: 58 KB
&&上传时间:
&&下载次数: 1
&&提 供 者:
&详细说明:飞Q的linux下简单实现,可是实现文件传输等简单功能-Simple implementation of feiQ
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&fq&&..\11.c&&..\22.c&&..\command.c&&..\command.h&&..\command.o&&..\IPMSG.H&&..\lrc.c&&..\main&&..\main.c&&..\main.h&&..\main.o&&..\makefile&&..\reword&&..\send_receive.c&&..\stftp.c&&..\tags&&..\thread.c&&..\thread.h&&..\thread.o
&输入关键字,在本站238万海量源码库中尽情搜索:ajax数据传输方式实例详解
转载 &更新时间:日 12:04:35 & 作者:Jeff Wong
这篇文章主要介绍了ajax数据传输方式,结合实例形式较为详细的分析总结了ajax数据传输的原理与传输文本、xml及json格式数据的具体实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
本文实例讲述了ajax数据传输方式。分享给大家供大家参考,具体如下:
在异步应用程序中发送和接收信息时,常见的可以选择以纯文本和XML作为数据格式(可参考《》),现在还有一种比较流行的方式:JSON(JavaScript Object Notation)。好了,下面举例说明这三种数据格式在ajax的异步应用。
一、纯文本方式
1、发送/接收数据:
Code is cheap.看代码:
// 此函数等价于document.getElementById /document.all
function $(s) { if (document.getElementById) { return eval('document.getElementById("' + s + '")'); } else { return eval('document.all.' + s); } }
// 创建 XMLHttpRequest对象,以发送ajax请求
function createXMLHTTP() {
var xmlHttp =
var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",
"MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
"Microsoft.XMLHTTP"];
for (var i = 0; i & arrSignatures. i++) {
xmlHttp = new ActiveXObject(arrSignatures[i]);
return xmlH
catch (oError) {
xmlHttp = //ignore
// throw new Error("MSXML is not installed on your system.");
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
return xmlH
var xmlReq = createXMLHTTP();
// 发送ajax处理请求(这里简单验证用户名和密码的有效性,默认正确的输入:用户名和密码都是test)
function validatePwd(oTxt) {
var url = "/AjaxOperations.aspx";
xmlReq.open("post", url, true);
xmlReq.setRequestHeader("Content-Length", oTxt.value.length + $("txtUserName").value.length);
xmlReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlReq.onreadystatechange = callB
xmlReq.send("action=chkPwd&userInfos=" + escape(oTxt.value + "/" + $("txtUserName").value)); // 发送文本
function callBack() {
if (xmlReq.readyState == 4) {
if (xmlReq.status == 200) {
alert(xmlReq.responseText); // 接收文本
else if (xmlReq.status == 404) {
alert("Requested URL is not found.");
} else if (xmlReq.status == 403) {
alert("Access denied.");
alert("status is " + xmlReq.status);
几个附加文件源码:
jsTest.htm
&title&js test&/title&
&script src="js/testJs.js" type="text/javascript"&&/script&
&form id="form1"&
用户名:&input id="txtUserName" name="txtUserName" type="text" /& &密码:&input id="txtPwd" name="txtPwd" type="password" onblur="validatePwd(this)" /&&/div&
AjaxOperations.aspx
代码如下:&%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AjaxOperations.aspx.cs" Inherits="WebTest2008.AjaxOperations" %&
AjaxOperations.aspx.cs
using System.Collections.G
using System.W
using System.Web.UI;
using System.Web.UI.WebC
namespace WebTest2008
public partial class AjaxOperations : System.Web.UI.Page
protected void Page_Load(object sender, EventArgs e)
if (!string.IsNullOrEmpty(Request["action"]) && Request["action"] == "chkPwd")
string responseTxt = "用户名和密码不匹配!";
string tempStr = Request["userInfos"];
/* 测试用 实际项目中可以对数据库进行检索等等相关操作,这里简化了 */
if (tempStr.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries)[0] == "test" && tempStr.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries)[1] == "test")
responseTxt = "验证通过!";
Response.Write(responseTxt);
一一保存文件,ctrl+F5,运行试试看吧。
上面这种方式是最简单最直接也是最有效的方式。熟练使用最佳。
二、XML方式
1、发送XML数据
// 此函数等价于document.getElementById /document.all
function $(s) { if (document.getElementById) { return eval('document.getElementById("' + s + '")'); } else { return eval('document.all.' + s); } }
// 创建 XMLHttpRequest对象,以发送ajax请求
function createXMLHTTP() {
var xmlHttp =
var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",
"MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
"Microsoft.XMLHTTP"];
for (var i = 0; i & arrSignatures. i++) {
xmlHttp = new ActiveXObject(arrSignatures[i]);
return xmlH
catch (oError) {
xmlHttp = //ignore
// throw new Error("MSXML is not installed on your system.");
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
return xmlH
var xmlReq = createXMLHTTP();
// 发送ajax处理请求(这里简单验证用户名和密码的有效性,默认正确的输入:用户名和密码都是test)
function validatePwd(oTxt) {
var url = "/AjaxOperations.aspx?action=xmlOp";
var xmlStr = "&profile&" +
" &userName&" + escape($("txtUserName").value) + "&/userName&" +
" &userPwd&" + escape($("txtPwd").value) + "&/userPwd&" +
"&/profile&";
xmlReq.open("post", url, true);
// Tell the server you're sending it XML
xmlReq.setRequestHeader("Content-Type", "text/xml"); // 这里注意
xmlReq.onreadystatechange = callB
xmlReq.send(xmlStr); // 发送XML
function callBack() {
if (xmlReq.readyState == 4) {
if (xmlReq.status == 200) {
alert(xmlReq.responseText); // 接收文本
else if (xmlReq.status == 404) {
alert("Requested URL is not found.");
} else if (xmlReq.status == 403) {
alert("Access denied.");
alert("status is " + xmlReq.status);
jsTest.htm文件不变,AjaxOperations.aspx的HTML文件内容不变,服务器端.CS处理代码如下:
AjaxOperations.aspx.cs
using System.Collections.G
using System.W
using System.Web.UI;
using System.Web.UI.WebC
using System.X
namespace WebTest2008
public partial class AjaxOperations : System.Web.UI.Page
protected void Page_Load(object sender, EventArgs e)
if (!string.IsNullOrEmpty(Request["action"]) && Request["action"] == "xmlOp") // 处理xml
XmlDocument doc = new XmlDocument();
doc.Load(Request.InputStream); //获取xml数据(这里需要注意接受xml数据的方法)
catch (Exception ex)
string responseTxt = "";
string tempName = doc.SelectSingleNode("profile/userName").InnerT
string tempPwd = doc.SelectSingleNode("profile/userPwd").InnerT
if (tempName == "test" && tempPwd == "test")
responseTxt = "验证通过!";
else responseTxt = "验证失败!";
Response.Write(responseTxt); // 写文本
很简单的代码,运行看看吧。
2、接收XML数据:
我们看到,上面两个.js文件里处理返回数据时都用到了xmlReq.responseText的属性,下面我们试试看xmlReq.responseXML属性:
// 此函数等价于document.getElementById /document.all
function $(s) { if (document.getElementById) { return eval('document.getElementById("' + s + '")'); } else { return eval('document.all.' + s); } }
// 创建 XMLHttpRequest对象,以发送ajax请求
function createXMLHTTP() {
var xmlHttp =
var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",
"MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
"Microsoft.XMLHTTP"];
for (var i = 0; i & arrSignatures. i++) {
xmlHttp = new ActiveXObject(arrSignatures[i]);
return xmlH
catch (oError) {
xmlHttp = //ignore
// throw new Error("MSXML is not installed on your system.");
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
return xmlH
var xmlReq = createXMLHTTP();
// 发送ajax处理请求(这里简单验证用户名和密码的有效性,默认正确的输入:用户名和密码都是test)
function validatePwd(oTxt) {
var url = "/AjaxOperations.aspx?action=xmlOp";
var xmlStr = "&profile&" +
" &userName&" + escape($("txtUserName").value) + "&/userName&" +
" &userPwd&" + escape($("txtPwd").value) + "&/userPwd&" +
"&/profile&";
xmlReq.open("post", url, true);
// Tell the server you're sending it XML
xmlReq.setRequestHeader("Content-Type", "text/xml");
xmlReq.onreadystatechange = callB
xmlReq.send(xmlStr); // 发送XML
function callBack() {
if (xmlReq.readyState == 4) {
if (xmlReq.status == 200) {
var xmlDoc = xmlReq.responseXML; // 接收XML
var nodes = xmlDoc.childN
alert("文件根标签的名称: " + xmlDoc.documentElement.tagName);
alert("根元素共有子节点个数: " + xmlDoc.documentElement.childNodes.length);
alert(xmlDoc.documentElement.childNodes(0).text);
else if (xmlReq.status == 404) {
alert("Requested URL is not found.");
} else if (xmlReq.status == 403) {
alert("Access denied.");
alert("status is " + xmlReq.status);
同样,jsTest.htm文件不变,AjaxOperations.aspx的HTML文件内容不变,服务器端.CS处理代码稍作修改如下:
using System.Collections.G
using System.W
using System.Web.UI;
using System.Web.UI.WebC
using System.X
namespace WebTest2008
public partial class AjaxOperations : System.Web.UI.Page
protected void Page_Load(object sender, EventArgs e)
if (!string.IsNullOrEmpty(Request["action"]) && Request["action"] == "xmlOp") // 处理xml
XmlDocument doc = new XmlDocument();
doc.Load(Request.InputStream); //获取xml数据
catch (Exception ex)
string responseXmlTxt = "";
string tempName = doc.SelectSingleNode("profile/userName").InnerT
string tempPwd = doc.SelectSingleNode("profile/userPwd").InnerT
if (tempName == "test" && tempPwd == "test")
responseXmlTxt = "&?xml version=\"1.0\" encoding=\"utf-8\" ?& &msg&验证通过!&/msg&"; // 测试用,简单的xml文件
else responseXmlTxt = "&?xml version=\"1.0\" encoding=\"utf-8\" ?&&msg&验证失败!&/msg&";
Response.ContentType = ("text/charset=UTF-8"); // 这里必须要设置,否则客户端接收不到这里写好的xml文件
Response.Write(responseXmlTxt); // 写xml
Response.End();
好了,前面两种方法是大家平时开发中比较熟悉的方式,下面我们来看看第三种方式。
三、JSON方式
json的准备知识:
json是一种简单的数据格式,比xml更轻巧。json是JavaScript 的原生格式,这意味着在 JavaScript 中处理json格式的 数据不需要任何特殊的API 或工具包。json的语法规则其实很简单:对象是一个无序的“‘名称/值'对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值' 对”之间使用“,”(逗号)分隔。看个例子先:
function testJson() {
//定义一个user(json的格式,其实就是定义一个js函数(变量)的方式而已)
var user =
"username": "jeff wong",
"age": 25,
"info": { "tel": "", "cellphone": "" },
"address": // 数组
{ "city": "beijing", "postcode": "101110" },
{ "city": "ny city", "postcode": "911119" }
alert(user.username);
alert(user.age);
alert(user.info.cellphone);
alert(user.address[0].city);
alert(user.address[0].postcode);
user.username = "xiao wang";
alert(user.username);
上面的定义方式看起来很简单,但是如果字段众多,命名方式混杂,出错的概率大大增加,怎么办?这时候你就会想到用程序的方式生成json数据。json提供了json.js包,专门提供了几种常用的json处理函数。下载下来,(json.js点击此处。) ,将其引入然后就可以简单的使用object.toJSONString()转换成json数据。看代码:
function Car(maker, model, year, color) {
this.maker =
this.model =
this.year =
this.color =
function testJson() {
var tempCar = new Car("VW", "S", 1999, "yellow");
alert(tempCar.toJSONString());
也可以使用eval或者parseJSON()方法来转换json数据到object:
function testJson() {
var str = '{ "name": "jeff wong", "age": 25,"address":"beijing"}';
var tempObj = eval('(' + str + ')');
alert(tempObj.toJSONString()); //使用eval方法
var tempObj1 = str.parseJSON();
alert(tempObj1.toJSONString()); // 或者使用parseJSON()方法
关于json.js的学习,请参考网上其他资源,这里我不再赘述了。说了这么多,实践环节开始了:
ajax利用json发送/接收数据:
// 此函数等价于document.getElementById /document.all
function $(s) { if (document.getElementById) { return eval('document.getElementById("' + s + '")'); } else { return eval('document.all.' + s); } }
// 创建 XMLHttpRequest对象,以发送ajax请求
function createXMLHTTP() {
var xmlHttp =
var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",
"MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
"Microsoft.XMLHTTP"];
for (var i = 0; i & arrSignatures. i++) {
xmlHttp = new ActiveXObject(arrSignatures[i]);
return xmlH
catch (oError) {
xmlHttp = //ignore
// throw new Error("MSXML is not installed on your system.");
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
return xmlH
var xmlReq = createXMLHTTP();
// 发送ajax处理请求(这里简单验证用户名和密码的有效性,默认正确的输入:用户名和密码都是test)
function validatePwd(oTxt) {
var url = "/AjaxOperations.aspx?action=jsonOp";
// JSON就只是文本,由于不需要特殊编码而且每个服务器端脚本都能处理文本数据,所以可以轻松利用JSON并将其应用到服务器。
var str = '{ "userName":"' + $("txtUserName").value + '", "userPwd": "' + $("txtPwd").value + '"}';
var jsonStr = str.parseJSON().toJSONString();
// you're sending it JSON
xmlReq.open("post", url, true);
xmlReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlReq.onreadystatechange = callB
xmlReq.send("sendStr=" + jsonStr); // 发送JSON(在服务器上解释JSON)
function callBack() {
if (xmlReq.readyState == 4) {
if (xmlReq.status == 200) {
var jsonStr = xmlReq.responseText.parseJSON().toJSONString(); //转化为json数据
alert(jsonStr);
else if (xmlReq.status == 404) {
alert("Requested URL is not found.");
} else if (xmlReq.status == 403) {
alert("Access denied.");
alert("status is " + xmlReq.status);
附加文件,AjaxOperations.aspx的html页面没有改变,AjaxOperations.aspx.cs代码稍作调整如下:
using System.Collections.G
using System.W
using System.Web.UI;
using System.Web.UI.WebC
namespace WebTest2008
public partial class AjaxOperations : System.Web.UI.Page
protected void Page_Load(object sender, EventArgs e)
if (!string.IsNullOrEmpty(Request["action"]) && Request["action"] == "jsonOp") // 处理JSON
string responseJsonTxt = "";
string tempStr = Request["sendStr"].Trim(new char[] { '{', '}' }); // 在服务器上解释JSON需要引用一个能够转化JSON的组件:Json.Net,这里简单测试,略过Json.Net
if (tempStr.Split(new char[] { ',' })[0].Split(new char[] { ':' })[1] == "\"test\"" && tempStr.Split(new char[] { ',' })[1].Split(new char[] { ':' })[1] == "\"test\"")
responseJsonTxt = "{\"msg\":\"验证通过!\"}"; // 测试用
else responseJsonTxt = "{\"msg\":\"验证失败!\"}";
Response.Write(responseJsonTxt);
Response.End();
jsTest.html引入json.js文件(必须下载json.js文件,否则js报错),如下:
&title&js test&/title&
&script src="js/json.js" type="text/javascript"&&/script&
&script src="js/testJs.js" type="text/javascript"&&/script&
&form id="form1"&
用户名:&input id="txtUserName" name="txtUserName" type="text" /&
&密码:&input id="txtPwd" name="txtPwd" type="password" onblur="validatePwd(this)" /&&/div&
希望本文所述对大家ajax程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 数据传递格式 的文章

 

随机推荐