jQuery学习之旅 Item10 ajax快餐_给ajax设置额外餐宿

  • load方法能够载入远程 HTML 文件代码并插入至 DOM 中。
  • 默认使用 GET 方式, 如果传递了data参数则使用Post方式.
  • 传递附加参数时自动转换为 POST 方式。jQuery 1.2 中,可以指定选择符,来筛选载入的 HTML 文档,DOM 中将仅插入筛选出的 HTML 代码。语法形如 “url #some > selector”, 默认的选择器是”body>*”.

讲解:

  • load是最简单的Ajax函数, 但是使用具有局限性:
  • 它主要用于直接返回HTML的Ajax接口
  • load是一个jQuery包装集方法,需要在jQuery包装集上调用,并且会将返回的HTML加载到对象中, 即使设置了回调函数也还是会加载.
    不过不可否认load接口设计巧妙并且使用简单.下面通过示例来演示Load接口的使用:
<html>
<head>
    <title>jQuery Ajax - Load</title>

    <script type="text/javascript" src="../scripts/jquery-1.3.2-vsdoc2.js"></script>

    <script type="text/javascript">
 $(function()
 {
 $("#btnAjaxGet").click(function(event)
 {
 //发送Get请求
 $("#divResult").load("../data/AjaxGetMethod.aspx?param=btnAjaxGet\_click" + "&tim
estamp=" + (new Date()).getTime());
 });

 $("#btnAjaxPost").click(function(event)
 {
 //发送Post请求
 $("#divResult").load("../data/AjaxGetMethod.aspx", { "param": "btnAjaxPost\_click" });
 });

 $("#btnAjaxCallBack").click(function(event)
 {
 //发送Post请求, 返回后执行回调函数.
 $("#divResult").load("../data/AjaxGetMethod.aspx", { "param": "btnAjaxCallBack\_click
" }, function(responseText, textStatus, XMLHttpRequest)
 {
 responseText = " Add in the CallBack Function! <br/>" + responseText
 $("#divResult").html(responseText); //或者: $(this).html(responseText);
 });
 });

 $("#btnAjaxFiltHtml").click(function(event)
 {
 //发送Get请求, 从结果中过滤掉 "鞍山" 这一项
 $("#divResult").load("../data/AjaxGetCityInfo.aspx?resultType=html" + "&timestamp
=" + (new Date()).getTime() + " ul>li:not(:contains('鞍山'))");
 });

 })
 </script>

</head>
<body>    
    <button id="btnAjaxGet">使用Load执行Get请求</button><br />
    <button id="btnAjaxPost">使用Load执行Post请求</button><br />
    <button id="btnAjaxCallBack">使用带有回调函数的Load方法</button><br />
    <button id="btnAjaxFiltHtml">使用selector过滤返回的HTML内容</button>
    <br />
    <div id="divResult"></div>
</body>
</html>

上面的示例演示了如何使用Load方法.

提示:

  • 我们要时刻注意浏览器缓存, 当使用GET方式时要添加时间戳参数 (net Date()).getTime() 来保证每次发送的URL不同, 可以避免浏览器缓存.
  • 当在url参数后面添加了一个空格, 比如” “的时候, 会出现”无法识别符号”的错误, 请求还是能正常发送. 但是无法加载HTML到DOM. 删除后问题解决.

2.jQuery.get( url, [data], [callback], [type] )

Returns: XMLHttpRequest

说明:

  • 通过远程 HTTP GET 请求载入信息。
  • 这是一个简单的 GET 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax

讲解:

  • 此函数发送Get请求, 参数可以直接在url中拼接, 比如:
$.get("../data/AjaxGetMethod.aspx?param=btnAjaxGet\_click");

或者通过data参数传递:

$.get("../data/AjaxGetMethod.aspx", { "param": "btnAjaxGet2\_click" });
  • 两种方式效果相同, data参数会自动添加到请求的url中,如果url中的某个参数, 又通过data参数传递, 不会自动合并相同名称的参数.

回调函数的签名如下:

function (data, textStatus) {
  // data could be xmlDoc, jsonObj, html, text, etc
  this; // the options for this ajax request
}

其中data是返回的数据, testStatus表示状态码, 可能是如下值:在回调函数中的this是获取options对象的引用
type参数是指data数据的类型, 可能是下面的值:
“xml”, “html”, “script”, “json”, “jsonp”, “text”.默认为”html”.

jQuery.getJSON( url, [data], [callback] ) 方法就相当于 jQuery.get(url, [data],[callback], “json”)

3. jQuery.getJSON( url, [data], [callback] )

Returns: XMLHttpRequest

相当于: jQuery.get(url, [data],[callback], “json”)

说明:

  • 通过 HTTP GET 请求载入 JSON 数据。
  • 在 jQuery 1.2 中,您可以通过使用JSONP 形式的回调函数来加载其他网域的JSON数据,如 “myurl?callback=?”。jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
    注意:此行以后的代码将在这个回调函数执行前执行。

讲解:

  • getJSON函数仅仅将get函数的type参数设置为”JSON”而已. 在回调函数中获取的数据已经是按照JSON格式解析后的对象了:
$.getJSON("../data/AjaxGetCityInfo.aspx", { "resultType": "json" }, function(data, textStatus)
{
      alert(data.length);
      alert(data[0].CityName);
});

服务器端返回的字符串如下:

[{""pkid"":""0997"",""ProvinceId"":""XJ"",""CityName"":""阿克苏"",""CityNameEn"":""Akesu"",""PostCode"":""843000"",""isHotCity"":false},
 {""pkid"":""0412"",""ProvinceId"":""LN"",""CityName"":""鞍山"",""CityNameEn"":""Anshan"",""PostCode"":""114000"",""isHotCity"":false}]

示例中我返回的饿是一个数组, 使用data.length可以获取数组的元素个数, data[0]访问第一个元素, data[0].CityName访问第一个元素的CityName属性.

4. jQuery.getScript( url, [callback] )

Returns: XMLHttpRequest

相当于: jQuery.get(url, null, [callback], “script”)

说明:

  • 通过 HTTP GET 请求载入并执行一个 JavaScript 文件。
  • jQuery 1.2 版本之前,getScript 只能调用同域 JS 文件。 1.2中,您可以跨域调用 JavaScript 文件。

讲解:

以前我使用dojo类库时官方默认的文件不支持跨域最后导致我放弃使用dojo(虽然在网上找到了可以跨域的版本, 但是感觉不够完美). 所以我特别对这个函数的核心实现和使用做了研究.
首先了解此函数的jQuery内部实现, 仍然使用get函数, jQuery所有的Ajax函数包括get最后都是用的是jQuery.ajax(), getScript将传入值为”script”的type参数, 最后在Ajax函数中对type为script的请求做了如下处理:

var head = document.getElementsByTagName("head")[0]; 
var script = document.createElement("script");
script.src = s.url;

上面的代码动态建立了一个script语句块, 并且将其加入到head中:

head.appendChild(script);

当脚本加载完毕后, 再从head中删除:

      // Handle Script loading
            if ( !jsonp ) {
                var done = false;

                // Attach handlers for all browsers
                script.onload = script.onreadystatechange = function(){
                    if ( !done && (!this.readyState ||
                            this.readyState == "loaded" || this.readyState == "complete") ) {
                        done = true;
                        success();
                        complete();

                        // Handle memory leak in IE
                        script.onload = script.onreadystatechange = null;
                        head.removeChild( script );
                    }
                };
            }


我主要测试了此函数的跨域访问和多浏览器支持.下面是结果:

这里写图片描述

下面是我关键的测试语句, 也用来演示如何使用getScript函数:

$("#btnAjaxGetJSON").click(function(event)
 {
                $.getScript("../scripts/getScript.js", function(data, textStatus)
 {
                    alert(data);
                    alert(textStatus);
                    alert(this.url);
                });
            });

            $("#btnAjaxGetJSONXSS").click(function(event)
 {
                $.getScript("http://resource.elong.com/getScript.js", function(data, textStatus)
 {
                    alert(data);
                    alert(textStatus);
                    alert(this.url);
                });
            });

5. jQuery.post( url, [data], [callback], [type] )

Returns: XMLHttpRequest

说明:

  • 通过远程 HTTP POST 请求载入信息。
  • 这是一个简单的 POST 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax

讲解:

  • 具体用法和get相同, 只是提交方式由”GET”改为”POST”.

6. jQuery.ajax( options )

Returns: XMLHttpRequest

说明:

  • 通过 HTTP 请求加载远程数据。
  • jQuery 底层 AJAX 实现。简单易用的高层实现见 $.get, $.post 等。
  • $.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该对象,但特殊情况下可用于手动终止请求。
  • $.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数信息。

jQuery 1.2 中,您可以跨域加载 JSON 数据,使用时需将数据类型设置为 JSONP。使用 JSONP 形式调用函数时,如 “myurl?callback=?” jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。数据类型设置为 “jsonp” 时,jQuery 将自动调用回调函数。

5、Ajax相关函数.

jQuery提供了一些相关函数能够辅助Ajax函数.

1. jQuery.ajaxSetup( options )
无返回值

说明:

  • 设置全局 AJAX 默认options选项。

讲解:

有时我们的希望设置页面上所有Ajax属性的默认行为.那么就可以使用此函数设置options选项, 此后所有的Ajax请求的默认options将被更改.

比如,设置 AJAX 请求默认地址为 “/xmlhttp/”,禁止触发全局 AJAX 事件,用 POST 代替默认 GET 方法。其后的 AJAX 请求不再设置任何选项参数:

$.ajaxSetup({
 url: "/xmlhttp/",
 global: false,
 type: "POST"
});
$.ajax({ data: myData });

2. serialize( )

Returns: String

说明:

  • 序列表表格内容为字符串,用于 Ajax 请求。
  • 序列化最常用在将表单数据发送到服务器端时. 被序列化后的数据是标准格式, 可以被几乎所有的而服务器端支持.
  • 为了尽可能正常工作, 要求被序列化的表单字段都有name属性, 只有一个eid是无法工作的.

像这样写name属性:

<input id="email" name="email" type="text" /> 

讲解:

serialize()函数将要发送给服务器的form中的表单对象拼接成一个字符串. 便于我们使用Ajax发送时获取表单数据. 这和一个From按照Get方式提交时, 自动将表单对象的名/值放到url上提交差不多.
比如这样一个表单:

这里写图片描述

生成的字符串为:single=Single&param=Multiple&param=Multiple3&check=check2&radio=radio1

3. serializeArray( )

Returns: Array<Object>

说明:

  • 序列化表格元素 (类似 ‘.serialize()’ 方法) 返回 JSON 数据结构数据。
  • 注意,此方法返回的是JSON对象而非JSON字符串。需要使用插件或者第三方库进行字符串化操作。

讲解:

看说明文档让我有所失望, 使用此函数获取到的是JSON对象, 但是jQuery中没有提供将JSON对象转化为JSON字符串的方法.
在JSON官网上没有找到合适的JSON编译器, 最后选用了jquery.json这个jQuery插件:
http://code.google.com/p/jquery-json/

使用起来异常简单:

var thing = {plugin: 'jquery-json', version: 1.3};
var encoded = $.toJSON(thing);              //'{"plugin": "jquery-json", "version": 1.3}'
var name = $.evalJSON(encoded).plugin;      //"jquery-json"


#### css

1,盒模型
2,如何实现一个最大的正方形
3,一行水平居中,多行居左
4,水平垂直居中
5,两栏布局,左边固定,右边自适应,左右不重叠
6,如何实现左右等高布局
7,画三角形
8,link @import导入css
9,BFC理解


![](https://img-blog.csdnimg.cn/img_convert/1e48795f395f63528b5381dc2ce287f5.webp?x-oss-process=image/format,png)

#### js

1,判断 js 类型的方式
2,ES5 和 ES6 分别几种方式声明变量
3,闭包的概念?优缺点?
4,浅拷贝和深拷贝
5,数组去重的方法
6,DOM 事件有哪些阶段?谈谈对事件代理的理解
7,js 执行机制、事件循环
8,介绍下 promise.all
9,async 和 await,
10,ES6 的 class 和构造函数的区别
11,transform、translate、transition 分别是什么属性?CSS 中常用的实现动画方式,
12,介绍一下rAF(requestAnimationFrame)
13,javascript 的垃圾回收机制讲一下,
14,对前端性能优化有什么了解?一般都通过那几个方面去优化的?


![](https://img-blog.csdnimg.cn/img_convert/17b435e95ef133cf79c4e1c0580e9450.webp?x-oss-process=image/format,png)

ink @import导入css
9,BFC理解


[外链图片转存中...(img-sYRjymQV-1714306768565)]

#### js

1,判断 js 类型的方式
2,ES5 和 ES6 分别几种方式声明变量
3,闭包的概念?优缺点?
4,浅拷贝和深拷贝
5,数组去重的方法
6,DOM 事件有哪些阶段?谈谈对事件代理的理解
7,js 执行机制、事件循环
8,介绍下 promise.all
9,async 和 await,
10,ES6 的 class 和构造函数的区别
11,transform、translate、transition 分别是什么属性?CSS 中常用的实现动画方式,
12,介绍一下rAF(requestAnimationFrame)
13,javascript 的垃圾回收机制讲一下,
14,对前端性能优化有什么了解?一般都通过那几个方面去优化的?


[外链图片转存中...(img-UWxC1W9F-1714306768566)]

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/topics/618166371)**
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值