12.jQuery的Ajax交互扩展
jQuery的Ajax方法
- $.ajax()
- $.get()
- $.post()
- $.getJSON()
- .load()
- ……
$.get()
简介
$.get( url [, data] [, success] [, dataType] );
参 数 | 类 型 | 说 明 |
---|
url | String | 必选,发送请求的地址 |
data | PlainObject 或 String | 发送到服务器的数据 |
success | Function( PlainObject result, String textStatus, jqXHR jqxhr ) | 请求成功后调用的函数 参数result:可选,由服务器返回的数据 |
dataType | String | 预期服务器返回的数据类型,包括:XML、HTML、Script、JSON、JSONP、text |
用法
$.get( url, data, function( result ) {
} );
$.ajax( {
"url" : url,
"data" : data,
"type" : "get",
"success" : function( result ) {
}
} );
$.post()
简介
$.post( url [, data] [, success] [, dataType] );
参 数 | 类 型 | 说 明 |
---|
url | String | 必选,发送请求的地址 |
data | PlainObject 或 String | 发送到服务器的数据 |
success | Function( PlainObject result, String textStatus, jqXHR jqxhr ) | 请求成功后调用的函数 参数result:可选,由服务器返回的数据 |
dataType | String | 预期服务器返回的数据类型,包括:XML、HTML、Script、JSON、JSONP、text |
用法
$.post( url, data, function( result ) {
} );
$.ajax( {
"url" : url,
"data" : data,
"type" : "post",
"success" : function( result ) {
}
} );
$.getJSON()
简介
$.getJSON( url [, data] [, success] );
参 数 | 类 型 | 说 明 |
---|
url | String | 必选,发送请求的地址 |
data | PlainObject 或 String | 发送到服务器的数据 |
success | Function( PlainObject result, String textStatus, jqXHR jqxhr ) | 请求成功后调用的函数 参数result:可选,由服务器返回的数据 |
用法
$.getJSON( url, data, function( result ) {
} );
$.ajax( {
"url" : url,
"data" : data,
"type" : "get",
"dataType" : "json",
"success" : function( result ) {
}
} );
load()
简介
$( selector ).load( url [, data] [, complete] );
参 数 | 类 型 | 说 明 |
---|
url | String | 必选,发送请求的地址 |
data | PlainObject 或 String | 发送到服务器的数据 |
complete | Function( String responseText, String textStatus, jqXHR jqxhr ) | 对每个匹配元素设置完内容后都会触发的函数 参数responseText:可选,服务器返回的数据 |
- 注意;
.load()
不是全局函数,而是针对与选择器匹配的元素执行- 包含匿名回调函数,自动将返回值设置为匹配元素的HTML内容
用法
$( "#opt_area>ul" ).load( url, data );
$.get( url, data, function( responseText ) {
$( "#opt_area>ul" ).html( responseText );
} );
- 注意:
- 默认使用GET方式请求,除非data参数是一个对象,则使用POST方式
基于表单数据的Ajax请求
- 使用jQuery提供的方法简化处理
.serializeArray()
$.param()
.serializeArray()
- 检测一组表单元素中的有效控件
- 没有被禁用
- 必须有name属性
- 选中的checkbox或radio
- 触发提交事件的submit按钮
- file元素不会被序列化
- 将有效控件序列化为JSON对象数组
$.param()
- 将由
. serializeArray()
生成的对象数组序列化成请求字符串的形式
nid=nid的值&cauthor=cauthor的值&cip=cip的值
- jQuery还提供了
.serialize()
方法。
- .serialize()内部使用$.param()对.serializeArray()做了一个简单包装。不需要中间环节时,可以更简便地完成表单数据的序列化
FastJSON
简介
- 随着JSON的广泛使用,在服务器端生成JSON字符串成了一件麻烦的工作,效率低且易出错
- FastJSON
- 一个性能很好的、Java实现的JSON解析器和生成器
- 将Java对象序列化成JSON字符串
- 将JSON字符串反序列化得到Java对象
- https://github.com/alibaba/fastjson/releases
FastJSON API
- 入口类:com.alibaba.fastjson.JSON
方 法 | 说 明 |
---|
public static String toJSONString ( Object object ) | 将Java对象序列化成JSON字符串 |
public static String toJSONString ( Object object, boolean prettyFormat ) | prettyFormat为true时生成带格式的JSON字符串 |
public static String toJSONString ( Object object, SerializerFeature… features ) | 可以通过参数features指定更多序列化规则 |
public static String toJSONStringWithDateFormat ( Object object, String dateFormat, SerializerFeature… features ) | 可以通过参数dateFormat指定日期类型的输出格式 |
- 枚举类型 SerializerFeature 定义了多种序列化属性
枚 举 值 | 说 明 |
---|
QuoteFieldNames | 为字段名加双引号,默认即使用 |
WriteMapNullValue | 输出值为null的字段,默认不输出 |
WriteNullListAsEmpty | 将值为null的List字段输出为[ ] |
WriteNullStringAsEmpty | 将值为null的String字段输出为“” |
WriteNullNumberAsZero | 将值为null的数值字段输出为0 |
WriteNullBooleanAsFalse | 将值为null的Boolean字段输出为false |
SkipTransientField | 忽略transient字段,默认即忽略 |
PrettyFormat | 格式化JSON字符串,默认不格式化 |
String strJSON = JSON.toJSONString ( javaObject,
SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullNumberAsZero,
SerializerFeature.WriteNullStringAsEmpty );
jQuery让渡$操作符
- jQuery不是唯一使用 $ 的脚本库,项目中有其他同样使用 $ 的脚本库时就会引起冲突
<script type="text/javascript" src="../js/jquery-1.12.4.min.js" />
<script type="text/javascript" src="../js/prototype.js" />
<script type="text/javascript" src="../js/prototype.js" />
<script type="text/javascript" src="../js/jquery-1.12.4.min.js" />
- jQuery定义了
jQuery.noConflict()
方法,放弃对$的使用权,以免与其他脚本库冲突
jQuery.noConflict();
jQuery( document ).ready( … );
var $j = jQuery.noConflict();
$j( document ).ready( … );
- 改变了jQuery的编码风格,烦琐且不利于重用已有代码
jQuery.noConflict();
jQuery( document ).ready( function( $ ) {
$( "#show" ).click( … );
} );
jQuery.noConflict();
( function( $ ) {
$( document ).ready( function() {
$( "#show" ).click( … );
} );
} )( jQuery );