ajax get请求_JSP中的对讲机Ajax简述

点击蓝字

关注我们

16954714515ca38660cd5011fad73ac6.png

传统上,网页需要重新加载才能更新内容。对于基于网络的电子邮件来说,这意味着用户必须手动重新加载他们的收件箱,以检查和查看他们是否有新邮件。这有很大的缺点:速度慢,而且需要用户输入。当用户重新加载他们的收件箱时,服务器必须重新构建整个网页,并重新发送所有的HTML、CSS、JavaScript以及用户的电子邮件。这是非常低效的。理想情况下,服务器应该只需要发送用户的新邮件,而不是整个页面。到了2003年,所有的主流浏览器都解决了这个问题,采用了XMLHttpRequest(XHR)对象,允许浏览器与服务器进行通信,而不需要重新加载页面。

XMLHttpRequest对象是一种叫做Ajax(异步JavaScript和XML)的技术的一部分。使用Ajax,数据就可以通过XMLHttpRequest API在浏览器和服务器之间传递,而不需要重新加载网页。随着XMLHttpRequest对象的广泛采用,很快就可以构建像Google Maps和Gmail这样的Web应用程序,使用XMLHttpRequest来获取新的地图磁贴或新的电子邮件,而无需重新加载整个页面。

Ajax请求是由JavaScript代码触发的;你的代码向一个URL发送一个请求,当它收到响应时,可以触发一个回调函数来处理响应。因为请求是异步的,所以当请求被处理时,你的其他代码会继续执行,所以必须使用回调来处理响应。

不幸的是,不同的浏览器对Ajax API的实现方式不同。通常情况下,这意味着开发人员必须考虑到所有不同的浏览器,以确保Ajax能够普遍工作。幸运的是,jQuery提供了Ajax支持,它抽象地消除了痛苦的浏览器差异。它既提供了功能齐全的$.ajax()方法,也提供了简单方便的方法,如$.get()、$.getScript()、$.getJSON()、$.post()和$().load()。

尽管名为 "Ajax",但大多数jQuery应用程序实际上并不使用XML;相反,它们以纯HTML或JSON(JavaScript对象符号)的形式传输数据。

一般来说,Ajax不能跨域工作。例如,一个从example1.com加载的网页无法向example2.com发出Ajax请求,因为这将违反相同的来源策略。作为一种解决方法,JSONP(带填充的JSON)使用标签从另一个域加载包含任意JavaScript内容和JSON的文件。最近,浏览器已经实现了一种叫做跨源资源共享(CORS)的技术,它允许向不同域的Ajax请求。

关键概念

正确使用Ajax相关的jQuery方法,需要先了解一些关键概念。

GET vs. POST

向服务器发送请求的两种最常见的 "方法 "是GET和POST。了解每种方法的正确应用是很重要的。

GET方法应该用于非破坏性操作--也就是说,你只是从服务器上 "获取 "数据,而不是改变服务器上的数据的操作。例如,对搜索服务的查询可能是一个GET请求。GET请求可能会被浏览器缓存,这可能会导致不可预知的行为,如果你没有想到的话。GET请求一般会在一个查询字符串中发送所有数据。

POST方法应该用于破坏性操作--也就是在服务器上改变数据的操作。例如,用户保存一篇博客文章应该是一个POST请求。POST请求一般不会被浏览器缓存;查询字符串可以是URL的一部分,但数据往往会作为post数据单独发送。

数据类型

jQuery通常需要一些指令来说明你期望从Ajax请求中得到的数据类型;在某些情况下,数据类型是由方法名指定的,而在其他情况下,它是作为配置对象的一部分提供的。有几个选项。

text用于传输简单的字符串。

html用于传输要放在页面上的HTML块。

script用于添加一个新的脚本到页面。

json用于传输JSON格式的数据,可以包括字符串、数组和对象。

注意:从jQuery 1.4开始,如果你的服务器发送的JSON数据没有正确的格式化,请求可能会无声地失败。参见http://json.org,了解正确格式化JSON的细节,但作为一般规则,使用内置的语言方法在服务器上生成JSON以避免语法问题。

jsonp用于从另一个域传输JSON数据。

xml用于在自定义XML模式中传输数据。

在大多数情况下考虑使用JSON格式,因为它提供了最大的灵活性。它对于同时发送HTML和数据特别有用。

异步Ajax的异步性让很多jQuery新用户措手不及。因为Ajax调用默认是异步的,所以响应不是立即可用。响应只能使用回调来处理。所以,举例来说,下面的代码将无法工作。

var response; $.get( "foo.php", function( r ) {    response = r;}); console.log( response ); // undefined

相反,我们需要向我们的请求传递一个回调函数;这个回调将在请求成功时运行,此时我们可以访问它返回的数据(如果有的话)。

$.get( "foo.php", function( response ) {    console.log( response ); // server response});

同源策略和JSONP。在一般情况下,Ajax请求被限制在相同的协议(http或https),相同的端口,和相同的域名作为页面的请求。这个限制不适用于通过jQuery的Ajax方法加载的脚本。

注意:Internet Explorer小于10的版本不支持跨域AJAX请求。

另一个例外是针对另一个域的JSONP服务的请求。在JSONP的情况下,服务的提供者已经同意用一个脚本来响应你的请求,这个脚本可以使用标签加载到页面中,从而避免了同源的限制;这个脚本将包括你所请求的数据,并包裹在你提供的回调函数中。

Ajax和FirebugFirebug(或 Chrome 或 Safari 中的 Webkit Inspector)是处理 Ajax 请求的重要工具。您可以在 Firebug 的 Console 选项卡(以及 Webkit Inspector 的 Resources > XHR 面板)中查看 Ajax 请求的发生情况,您还可以单击请求以展开请求并查看请求头、响应头、响应内容等详细信息。如果某个 Ajax 请求没有按照预期进行,那么首先要查找的就是该请求的问题所在。

ae020e0ae0c9747b56da4b1754bc80e0.png

球分享

ae020e0ae0c9747b56da4b1754bc80e0.png

球点赞

ae020e0ae0c9747b56da4b1754bc80e0.png

球在看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值