当前位置: 首页 > 工具软件 > Ajax IM > 使用案例 >

Asp.Net MVC 使用 Ajax(一)

长孙鸿波
2023-12-01

Ajax

简单来说Ajax是一个无需重新加载整个网页的情况下,可以更新局部页面或数据的技术(异步的发送接收数据,不会干扰当前页面)。

Ajax工作原理

Ajax使浏览器和服务器之间多了一个Ajax引擎作为中间层。通过Ajax请求服务器时,Ajax会自行判断哪些数据是需要提交到服务器,哪些不需要。只有确定需要从服务器读取新数据时,Ajax引擎才会向服务器提交请求。

Jquery中的Ajax

JQuery 对 Ajax 做了大量的封装,不需要去考虑浏览器兼容性,使用起来也较为方便。

jquery对Ajax一共有三层封装。

  • 最底层:$.ajax()
  • 第二层:.load()、$.get()和$.post()
  • 最高层: $.getScript()和$.getJSON()方法

$.Ajax()

$.Ajax()是所有Ajax方法中最底层的方法,其他的都是基于$.Ajax()方法的封装,该方法只有一个参数JQueryAjaxSettings(功能键值对)。

$.Ajax参数JQueryAjaxSettings介绍:

参数类型说明
urlString请求的地址
typeString请求方式:POST 或 GET,默认 GET
timeoutNumber设置请求超时的时间(毫秒)
dataObject或String发送到服务器的数据,键值对或字符串
dataTypeString从服务器返回的数据类型,比如 html、xml、json 等
beforeSendFunction发送请求前可修改 XMLHttpRequest 对象的函数
completeFunction请求完成后调用的回调函数
successFunction请求成功后调用的回调函数,先执行success再执行complete
errorFunction请求失败时调用的回调函数,先执行error再执行complete
globalBoolean默认为 true,表示是否触发全局 Ajax
cacheBoolean设置浏览器缓存响应,默认为 true。如果 dataType类型为 script 或 jsonp 则为 false。
contentDOM指定某个元素为与这个请求相关的所有回调函数的上下文。
contentTypeString指 定 请 求 内 容 的 类 型 。 默 认 为application/x-www-form-urlencoded。
asyncBoolean是否异步处理。默认为 true,false 为同步处理
processDataBoolean默认为 true,数据被处理为 URL 编码格式。如果为 false,则阻止将传入的数据处理为 URL 编码的格式。
dataFilterFunction用来筛选响应数据的回调函数。
ifModifiedBoolean默认为 false,不进行头检测。如果为true,进行头检测,当相应内容与上次请求改变时,请求被认为是成功的。
jsonpString指定一个查询参数名称来覆盖默认的 jsonp 回调参数名 callback。
usernameString在 HTTP 认证请求中使用的用户名
passwordString在 HTTP 认证请求中使用的密码
scriptCharsetString当远程和本地内容使用不同的字符集时,用来设置 script 和 jsonp 请求所使用的字符集。
xhrFunction用来提供 XHR 实例自定义实现的回调函数
traditionalBoolean默认为 false,不使用传统风格的参数序列化。如为 true,则使用

代码示例:


$('button').click(function(){
    $.ajax(
        {
            type:'post',
            url:'test',
            data:{
                url:'hello',
            },
            dataType:'json',
            success:function(data,stutas,xhr){
                alert(data);
            },
            error:function(xhr, textStatus, data)){
                alert(data);
            },
            complete:function(xhr,textStatus){
                alert(textStatus);
            }
        }
    )
});

$.Ajax的回调函数介绍:

  • success

Function( Anything data, String textStatus, jqXHR jqXHR )

请求成功后执行的回调函数

参数类型说明
dataanything从服务器返回的数据,并根据dataType参数类型处理后的数据(默认是json)
textStatusstring描述状态的字符串
jqxhrjqXHRXMLHTTPRequest对象
  • error

Function( jqXHR jqXHR, String textStatus, String errorThrown )

请求失败是执行的回调函数

参数类型说明
errorThrownstringHTTP状态的文本部分
textStatusstring描述错误信息的字符串
jqxhrjqXHR描述发生错误类型的一个字符串 和 捕获的异常对象
  • complete

Function( jqXHR jqXHR, String textStatus )

请求完成后执行的回调函数,不管是成功还是失败都执行

参数类型说明
errorThrownstringHTTP状态的文本部分
textStatusstring描述请求状态的字符串
jqxhrjqXHRXMLHTTPRequest对象

$.load()

从服务器获取数据并且将返回的HTML代码插入至匹配的元素中。

$(’Element’).load(url,data,success(responseText,textStatus,XMLHttpRequest))

参数类型说明
urlstring必须 请求地址
dataJson或者string可选 请求数据 如果是json该load方法是post请求,默认是get请求
successfunction当请求成功后执行的回调函数
responseTextstring获得字符串形式的响应数据
textStatusstring文本方式返回HTTP状态码
XMLHttpRequestObjectxhr对象,有多种属性

$ .get()和$.post()

.load()一般在获取静态资源时调用,$.get()$.post()方法在需要和服务器交互数据时调用。
$.get() 方法通过 HTTP GET 请求载入信息。
这是$.ajax GET请求的简写方式。请求成功时可调用回调函数。

$.get(url,data,success(response,status,xhr),dataType)

使用$.get()从服务端获取数据-代码示例
定义model

public class PersonViewModel
{
    public int PersonID { get; set; }

    public string Name { get; set; }

    public string PhoneNum { get; set; }

    public bool IsMarried{get;set;}
    
}

定义Controller Action

public class MyAjaxController : Controller
 {   
   public JsonResult PersonList()
    {
        IList<PersonViewModel> persons = new List<PersonViewModel>();
        for (int i = 0; i < 10; i++)
        {
            persons.Add(new PersonViewModel() { Name = "name", IsMarried = false, PhoneNum = "1234" + i });
        }        
        return Json(persons,JsonRequestBehavior.AllowGet);
    }
 }

定义View

$.get('@Url.Action("PersonList", "MyAjax")',function (result) {
        $.each(result, function (index, person) {
            $('#myDiv').append('<p>Id: ' + person.PersonID + '</p>' +
                '<p>Name: ' + person.Name + '</p>');

        });
    });

//在Jquery1.5版本后,新增了一些事件,可以更好的处理不同结果。
$.get('@Url.Action("PersonList", "MyAjax")')
    .done(function (data) {
        $.each(data, function (index, person) {
            $('#myDiv').append('<p>Id: ' + person.PersonID + '</p>' +
                '<p>Id: ' + person.Name + '</p>');
        });
    })
    .fail(function (data) {
        alert(data);
    });

$.post() 方法通过 HTTP POST 请求从服务器载入数据。

$.post(url,data,success(data, textStatus, jqXHR),dataType)

使用$.post()方法向服务端发送数据-代码示例
定义一个Action

 [HttpPost]
public JsonResult ToPersonList(IEnumerable<PersonViewModel> persons)
{
    if (persons != null)
        return Json(true);
    else return Json(false);

}

定义一个View

<script>
var results = { persons : [{ "PersonID": "1", "Name": "Manas" },
    { "PersonID": "2", "Name": "Tester" }] };
$.post('@Url.Action("ToPersonList","MyAjax")',results, function (data) {
        alert(data)
    });;
    //同样也可以使用Jquery1.5版本的新的事件
$.post('@Url.Action("ToPersonList","MyAjax")', results)
        .done(function (data) {
            alert(data);
        })
        .fail(function (data) {
            alert(data);
        })
        .always(function (data) {
            alert(data);
        })
</script>

$.get() $.post()方法都是四个参数,前面三个参数和$.load()一样,最后一个参数dataType:服务器返回的数据格式:xml、html、script、json、jsonp和text。只有第一个参数是必须的,其他都可以为空。

$.get() $.post()都是$.ajax()的一个简写封装,都是只能回调success状态,error,和complete不能被回调。但是在jquery1.5版本上,新加了jqXHR.done() (表示成功), jqXHR.fail() (表示错误), 和 jqXHR.always() 事件,可以实现不同状态的回调。

表单序列化

如果我们有一个复杂的表单,一个一个获取表单数据是一个很琐碎的事。jquery提供了一个表单的序列化方法serialize(),会智能的获取指定表单内的所有元素(包括单选框,复选框,下拉列表等)把表单内容序列化为字符串。此外serializeArray()方法可以把数据整合为键值对的json对象。

如果我们需要多次调用$.ajax方法,并且很多参数都相同,可以使用$.ajaxSetup()方法,它会把一些公共的参数预先设置好,不用每次都设置。

$('form input[type=button]').click(function () {
    $.ajaxSetup({
        type : 'POST',
        url : 'test',
        data : $('form').serialize()
    });
    $.ajax({
        success : function (response, status, xhr) {
                    alert(response);
    });
    });

在使用 data 属性传递数据的时候,如果是以对象形式传递键值对,可以使用$.param()方法将对象转换为字符串键值对格式。
(主要是针对无法直接使用表单序列化方法.serialize(),且传递参数为对象的情况)


继续学习Asp.Net MVC 使用 Ajax(二)

 类似资料: