首页 前端知识 jQuery Ajax学习与运用,入职3个月的前端程序员面临转正

jQuery Ajax学习与运用,入职3个月的前端程序员面临转正

2024-05-12 17:05:31 前端知识 前端哥 636 242 我要收藏

$.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表示状态码, 可能是如下值:

“timeout”,“error”,“notmodified”,“success”,“parsererror”

在回调函数中的this是获取options对象的引用.有关options的各种说明, 请参见:

http://docs.jquery.com/Ajax/jQuery.ajax#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 文件。注意:Safari 2 或更早的版本不能在全局作用域中同步执行脚本。如果通过 getScript 加入脚本,请加入延时函数。

讲解:

以前我使用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 );

}

};

}

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

IE6FireFox注意事项
非跨域引用js通过通过回调函数中的data和textStatus均可用
跨域引用js通过通过回调函数中的data和textStatus均为undifined

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

$(“#btnAjaxGetScript”).click(function(event)

{

$.getScript(“…/scripts/getScript.js”, function(data, textStatus)

{

alert(data);

alert(textStatus);

alert(this.url);

});

});

$(“#btnAjaxGetScriptCross”).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 对象,包含各配置及回调函数信息。详细参数选项见下。

注意: 如果你指定了 dataType 选项,请确保服务器返回正确的 MIME 信息,(如 xml 返回 “text/xml”)。错误的 MIME 类型可能导致不可预知的错误。见 Specifying the Data Type for AJAX Requests 。

**注意:**如果dataType设置为"script",那么所有的远程(不在同一域名下)的POST请求都将转化为GET请求。(因为将使用DOM的script标签来加载)

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

讲解:

这是jQuery中Ajax的核心函数, 上面所有的发送Ajax请求的函数内部最后都会调用此函数.options参数支持很多参数, 使用这些参数可以完全控制ajax请求. 在Ajax回调函数中的this对象也是options对象.

因为平时使用最多的还是简化了的get和post函数, 所以在此不对options参数做详细讲解了. options参数文档请见:

http://docs.jquery.com/Ajax/jQuery.ajax#options

五.Ajax相关函数.


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

1. jQuery.ajaxSetup( options )

无返回值

说明:

设置全局 AJAX 默认options选项。

讲解:

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

options是一个对象, 可以设置的属性请此连接:http://docs.jquery.com/Ajax/jQuery.ajax#toptions

比如在页面加载时, 我使用下面的代码设置Ajax的默认option选项:

$.ajaxSetup({

url: “…/data/AjaxGetMethod.aspx”,

data: { “param”: “ziqiu.zhang” },

global: false,

type: “POST”,

success: function(data, textStatus) { $(“#divResult”).html(data); }

});

上面的代码设置了一个Ajax请求需要的基本数据: 请求url, 参数, 请求类型, 成功后的回调函数.

此后我们可以使用无参数的get(), post()或者ajax()方法发送ajax请求.完整的示例代码如下:

jQuery Ajax - Load

不传递参数调用ajax()方法

不传递参数调用get()方法

不传递参数调用post()方法

传递参数调用get()方法, 使用全局的默认回调函数


注意当使用get()或者post()方法时, 除了type参数将被重写为"GET"或者"POST"外, 其他参数只要不传递都是使用默认的全局option. 如果传递了某一个选项, 比如最后一个按钮传递了url和参数, 则本次调用会以传递的选项为准. 没有传递的选项比如回调函数还是会使用全局option设置值.

2.serialize( )

Returns: String

说明:

序列表表格内容为字符串,用于 Ajax 请求。

序列化最常用在将表单数据发送到服务器端时. 被序列化后的数据是标准格式, 可以被几乎所有的而服务器端支持.

为了尽可能正常工作, 要求被序列化的表单字段都有name属性, 只有一个eid是无法工作的.

像这样写name属性:

讲解:

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

比如这样一个表单:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

提示:代码见 chapter6\7-serialize.htm

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/

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

总结一下

面试前要精心做好准备,简历上写的知识点和原理都需要准备好,项目上多想想难点和亮点,这是面试时能和别人不一样的地方。

还有就是表现出自己的谦虚好学,以及对于未来持续进阶的规划,企业招人更偏爱稳定的人。

万事开头难,但是程序员这一条路坚持几年后发展空间还是非常大的,一切重在坚持。

为了帮助大家更好更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。

前端面试题汇总

JavaScript

性能

linux

前端资料汇总

前端工程师岗位缺口一直很大,符合岗位要求的人越来越少,所以学习前端的小伙伴要注意了,一定要把技能学到扎实,做有含金量的项目,这样在找工作的时候无论遇到什么情况,问题都不会大。

n/img_convert/621960a57eb42479e02d6d64c0c81891.png)

前端面试题汇总

JavaScript

性能

linux

前端资料汇总

前端工程师岗位缺口一直很大,符合岗位要求的人越来越少,所以学习前端的小伙伴要注意了,一定要把技能学到扎实,做有含金量的项目,这样在找工作的时候无论遇到什么情况,问题都不会大。

转载请注明出处或者链接地址:https://www.qianduange.cn//article/8367.html
标签
评论
发布的文章

Newtonsoft.Json

2024-05-23 20:05:19

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!