定义和用法
ajax() 方法通过 HTTP 请求加载远程数据。
该方法是 jQuery 底层 AJAX 实现。大多数情况下你无需直接操作该函数,除非你需要操作不常用的选项,以获得更多的灵活性。
var url = "/test/check";
$.ajax({
url: url,
type: "post",//默认值: "GET")。请求方式 ("POST" 或 "GET")。注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持。
data: {
name:"张三",
age:22
},
timeout:15000,//设置请求超时时间(毫秒)。此设置将覆盖全局设置。
cache: false,//是否缓存,默认值: true,dataType 为 script 和 jsonp 时默认为 false
async : false,//是否异步,默认为true
dataType: "json",//请求数据类型
beforeSend:function(XMLHttpRequest){
//开始请求之前
alert("正在获取数据...");
},
success: function (data ,textStatus, jqXHR)
{
alert(data);
},
complete:function(XMLHttpRequest,textStatus){
//请求完成
// textStatus 可能为:null、'success'、 'notmodified'、 'error'、 'timeout'、 'abort'或'parsererror'等
if(textStatus=='timeout'){//判断是否超时
var xmlhttp = window.XMLHttpRequest ? new window.XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHttp");
xmlhttp.abort();//终止当前请求
alert("网络超时!");
}
},
error:function (XMLHttpRequest, textStatus, errorThrown) {
alert("请求失败!");
}
});
参数
type
类型:String
默认值: “GET”)。请求方式 (“POST” 或 “GET”), 默认为 “GET”。注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持。
data
类型:String
发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后。必须为 Key/Value 格式。如果为数组,jQuery 将自动为不同值对应同一个名称。如 {foo:[“bar1”, “bar2”]} 转换为 ‘&foo=bar1&foo=bar2’。
dataType
类型:String
预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML。可用值:
- “xml”: 返回 XML 文档,可用 jQuery 处理。
- “html”: 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。
- “script”: 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 “cache” 参数。
- “json”: 返回 JSON 数据 。
- “jsonp”: JSONP 格式。使用 JSONP 形式调用函数时,如 “myurl?callback=?” jQuery将自动替换 ? 为正确的函数名,以执行回调函数。
- “text”: 返回纯文本字符串
async
类型:Boolean
默认值: true。默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
回调方法
beforeSend()
发送请求之前回调的方法,一般可用于防止重复数据请求、实现Toast效果等:
beforeSend: function () {
// 禁用按钮防止重复提交
$("#submit").attr({ disabled: "disabled" });
//显示加载动画
$("loading").show();
}
success(data)
这个大家应该很熟悉了,请求成功时的返回,data的数据类型根据服务器端定义的,一般为string、int、bool、json
error()
请求失败时回调
complete(XMLHttpRequest,textStatus)
请求完成时回调,不管是请求失败、超时、成功都会回调的方法,一般可在这里做请求超时处理、隐藏加载动画、取消禁用按钮等
complete: function () {
if(textStatus=='timeout'){//判断是否超时
alert("网络超时!");
}
$("#submit").removeAttr("disabled");
$("loading").hide();
},
一个简单的例子
前端代码:
$.ajax({
type: 'post',
url: '../MyBalance/setShare',
dataType: 'json',
data: { userName : "小王"},
success: function (result) {
if (result.result == 1) {
alert("成功")
}else if (result.result == 0) {
alert("参数错误")
}else if (result.result == -1) {
alert("系统异常")
}
}
})
后台代码:
public JsonResult setShare(string userName )
{
int result = 0;
try
{
if (userName != null)
{
//处理逻辑
result = 1;
}else{
result = 0;
}
return Json(new { result = result }, JsonRequestBehavior.AllowGet);
}
catch
{
return Json(new { result = -1 }, JsonRequestBehavior.AllowGet);
}
}