一、概述

是一种无需再浏览器中刷新整个页面就能从服务器端获取并显示数据的技术。
本来代表的是异步JavaScript和XML,Ajax允许我们向服务器发起异步请求,
意味着请求发生在幕后,不会阻塞用户与页面内容之间的交互。
    jQuery定义了一整套Ajax快捷方法,本质上都是核心Ajax函数的
某种封装,用于方便快捷地执行常见的Ajax任务。

二、异步请求的优缺点

①、优点:
   使我们得以创建更友好的html页面,根据来自服务器的数据平滑的更新页
面,即无需打断用户的交互。
②、缺点:
   无法预知请求在什么时候完成,也无法对请求结果做任何假定。其次,回调函
数的广泛使用通常会导致更加复杂的代码。

三、JSON(JavaScript Object Notation)数据

较于XML来说,是一种更简单的数据格式,且容易被JavaScript处理(与使
用JavaScript代码表示数据的方式一样)。    
请求方式简介:
    get请求发送表单数据可能会有风险。一般来说:
    get:
        仅用于获取只读的信息。
    post:
        用于任何会导致应用程序状态发生变化的操作。
    web标准术语来讲,GET请求用于安全的交互(除了获取数据没有副作用),
而post请求用于非安全的交互(做一个什么决定或者改变什么东西)。

四、跨源Ajax请求

Access-Control-Allow-Origin:http://www.flowershop.com
   默认情况下,浏览器只允许脚本对于页面同源的服务器发起请求。
   一个源就是由协议、主机名和端口组成的URL.如果两个URL有着同样的协议、
主机名和端口,那么它们就是同源的,如果三者之一有所不同,那么它们就是不同
源的。(http://en.wikipedia.org/wiki/Cross-site_scripting);
   当我们从一个来源向另一个来源发起请求时,这就是跨源请求。同时,跨源请
求是不被允许的。开发者不得不想尽办法欺骗浏览器,以设法绕过这条规则发出跨
源请求。幸运的是,如今已有一条支持跨源的合法通道,即CORS(
Cross-Origin Resource Sharing,跨源资源共享规范)。完整规范可参见
http://www.w3.org/TR/cors/

五、JSONP

JSONP是CORS的替代方案,不同之处在于它支持那些仅允许同源Ajax请求的
环境。依赖于这样一个事实:浏览器允许我们从任意服务器上载入JavaScript代
码,这也正是script元素src属性的工作方式。要使用JSONP:
①、首先要在页面中定义一个处理数据的函数。
    ...
    function processjsONP(data){
        //处理数据
    }
    ...

②、向服务器发起请求,并在查询字符串中加上表单数据及callback属性,把
callback的值设为刚才定义的函数名。

③、服务器像往常一样生成json数据,然后创建一条JavaScript语句,调用刚
才定义的函数,并把数据作为这个函数的参数,同时将响应内容的content-
type设置为text/javascript,这样浏览器就知道收到是JavaScript代码,
应该执行它们。这样实际上调用了我们之前定义的函数,而且以服务器返回的数据
作为参数。如此,无需跨源,一样完美绕过了同源的问题。

六、常见问题

1、如何发起一个异步的HTTP GET请求?
    使用get方法。
    $(document).ready(function(){
        $.get("flowers.html",function (data){
            getAfterHandler(data);
        });
    });
    或者:
    $(document).ready(function(){
        $.get("flowers.html",getAfterHandler);
    });

    /*get之后回调函数*/
    function getAfterHandler(data){
        var elems = $(data).filter("div").addClass("dcell");
        elems.slice(0,3).appendTo("#row1");
        elems.slice(3).appendTo("#row2");
    }



2、如何处理来自Ajax GET请求的数据?
    传递一个回调函数给get方法。

3、如何为响应用户行为而发起Ajax请求?
    在事件处理函数中调用get方法。
    $(document).ready(function (){
        $("<button>Ajax toggle</button>").appendTo("#buttonDiv").click(function (e){
                $.get("flowers.html",function(data){
                    getAfterHandler(data);
                });
            e.preventDefault();
        })
    });

4、如何向服务器端请求JSON数据?
    使用get方法,并在回调函数中接收数据。
    $.get("myjson.json",function(data){
        handlerData(data);
    });

5、如何在发起get请求的同时发送数据给服务器?
    作为参数传递一个javaScript对象给get方法。
    var requestData = {
        country:"US",state:"New York"
    };
    $.get("myjson.json",requestData,function(data){
        handlerData(data);
    });
    提供的数据会被作为请求字符串追加到目标URL中,因此,意味着组装
的数据会成为如下的样子发送:
    http://.../..html?country=US&state=New+York


6、如何发起一个HTTP异步POST请求?
    使用post方法。
    $(document).ready(init);
    function init(){
        var btn = $("button");
        btn.on("click",btnClickCallBack);
    }
    function btnClickCallBack(e){
        var formData = $("form").serialize();
        $.post("url",formData,processServerResponse);
        e.preventDefault();
    }
    function processServerResponse(data){
        ...
    }


7、如何在post请求中发送非表单数据?
    作为参数传递一个javaScript对象给post方法。
    $(document).ready(init);
    function init(){
        var btn = $("button");
        btn.on("click",btnCallback);
    }
    function btnCallback(e){
        var requestData= {
            apples:2,oranges:10
        };
        $.post("url",processServerResponse);
        e.preventDefault();
    }
    function processServerResponse(data){
        JSON.stringify(data);
    }
    JSON.stringify:把JSON对象重新转换为JSON字符串。


8、如何在Ajax请求中忽略服务器指定的数据类型?
    在发起Ajax请求时(给get和post方法)指定期望的数据类型。

    在使用get和post方法时,jQuery必须设法搞清服务器端响应数据的
类型;可能是HTML、JavaScript代码,或者其他类型。jQuery根据服务器响应
的信息,
特别是Content-type抱头来判断响应数据的类型。但当web服务器为响应的数据
使用了错误的MIME类型,jQuery需要一些提示。
    基于上述原因,可以为get或post方法多提供一个参数,直接告诉
jQuery我们需要的数据类型。如下为可提供的参数:
        xml
        json
        jsonp
        script
        html
        text

    代码样例:
        $(document).ready(init);
        function init(){
            $.get("url",processFunction,"json");
        }
        function processFunction(data){
            console.log(JSON.stringify(data));
        }

9、如何避免最常见的Ajax陷阱?
    不要错把Ajax异步请求当成同步请求。
    var elems;
    $.get("url",function(data){
        elems = $(data).filter("div").addClass("cell");
    });
    elems.slice()...;


10、如何使用特定数据类型的GET快捷方法?
    使用load、getScript或getJSON方法。

11、如何为表单元素轻松弃用Ajax?
    使用Ajax Forms插件。

12、jquery对JSONP的支持?
    使用getJSON方法时在URL的查询字符串中增加callback=?。
jQuery会自动生成一个随机名字的回调函数,并使用它和服务器进行通信,例子如下:
    var url = "http://.../order?callback=?";
    $.getJSON(url,processServerResponse);

Ajax一的更多相关文章

  1. canvas中普通动效与粒子动效的实现代码示例

    canvas用于在网页上绘制图像、动画,可以将其理解为画布,在这个画布上构建想要的效果。本文详细的介绍了粒子特效,和普通动效进行对比,非常具有实用价值,需要的朋友可以参考下

  2. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  3. H5混合开发app如何升级的方法

    本篇文章主要介绍了H5混合开发app如何升级的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  4. canvas学习和滤镜实现代码

    这篇文章主要介绍了canvas学习和滤镜实现代码,利用 canvas,前端人员可以很轻松地、进行图像处理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. 详解使用postMessage解决iframe跨域通信问题

    这篇文章主要介绍了详解使用postMessage解决iframe跨域通信问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  6. HTML5数字输入仅接受整数的实现代码

    这篇文章主要介绍了HTML5数字输入仅接受整数的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  7. amaze ui 的使用详细教程

    这篇文章主要介绍了amaze ui 的使用详细教程,本文通过多种方法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. localStorage的过期时间设置的方法详解

    这篇文章主要介绍了localStorage的过期时间设置的方法详解的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  9. 详解HTML5 data-* 自定义属性

    这篇文章主要介绍了详解HTML5 data-* 自定义属性的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. HTML5的postMessage的使用手册

    HTML5提出了一个新的用来跨域传值的方法,即postMessage,这篇文章主要介绍了HTML5的postMessage的使用手册的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部