前端随心记---------Ajax原理及实现跨域方法

Ajax原理: 

   Ajax的原理简单来说就是通过XmlHttpRequest对象来向服务器发送异步请求,从服务器获得数据,然后用JavaScript来操作dom从而更新页面。这其中最关键的一步就是从服务器获得请求数据。

   XmlHttpRequest是Ajax的核心机制,它是在IE5中首先引入的,是一种支持异步请求的技术。简单的说,也就是JavaScript可以 及时向服务器提出请求和处理响应,而不阻塞用户,达到无刷新的效果。

    ajax实际上是异步的javascript和xml。

原生js实现ajax请求:

//创建 XMLHttpRequest 对象
var ajax = new XMLHttpRequest();
//规定请求的类型、URL 以及是否异步处理请求。
ajax.open(‘GET‘,url,true);
//发送信息至服务器时内容编码类型
ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
//发送请求
ajax.send(null);
//接受服务器响应数据
ajax.onreadystatechange = function () {
    if (obj.readyState == 4 && (obj.status == 200 || obj.status == 304)) {
    }
};

ajax请求方式get和post的区别

代码上:

  get通过url传递参数。

  post通过设置请求头,规定请求数据类型。

使用上:

  post比get安全。

  get传递速度比post快   根据传参决定。

  get获取数据    post上传数据。

  post传输文件大理论上没有限制,  get传输文件小。

造成跨域的原因:

  浏览器的同源策略。

  事实上,当我们在跨域请求服务器时,服务器收到请求并响应了数据给浏览器,但是由于浏览器的同源策略,对响应数据进行校对时,发现返回数据的域名和当前发送数据域名并不是同域,因此根据浏览器的机制进行丢弃。

实现跨域的解决方案:

1.jsonp      只能解决get跨域

原理:动态创建一个script标签。利用script标签的src属性不受同源策略限制,因为所有的src属性和herf属性都不受同源策略限制,可以请求第三方服务器数据内容。

步骤:

   1.去创建一个script标签
   2.script的src属性设置接口地址
   3.接口参数,必须要带一个自定义函数名 要不然后台无法返回数据。
   4.通过定义函数名去接收后台返回数据

//去创建一个script标签
var  script = document.createElement("script");
//script的src属性设置接口地址 并带一个callback回调函数名称
script.src = "http://127.0.0.1:8888/index.php?callback=jsonpCallback";
//插入到页面
document.head.appendChild(script);
//通过定义函数名去接收后台返回数据
function jsonpCallback(data){
    //注意  jsonp返回的数据是json对象可以直接使用
    //ajax  取得数据是json字符串需要转换成json对象才可以使用。
}

2.同域代理。

3.domain.xml服务器配置文件。

4.cors  跨域资源共享。

$. axios

利用jQquery实现ajax。

<script>
            $.ajax({
            "url":"userServlet",        //要提交的URL路径
            "type":"GET",                //发送请求的方式
            "data":"name="+name,        //要发送到服务器的数据
            "dataType":"text",            //指定返回的数据格式
            "success":"callback",        //响应成功后要执行的代码
            "error":function(){            //请求失败后要执行的代码
                alert("用户名验证时出现错误,请稍后再试");
            }
        });

        //响应成功的回调函数
        function callback(data){
            if(data=="true"){
                $("#nameDIV").html("用户名已被使用");
            }else{
                $("#nameDIV").html("用户名可以使用");
            }
        }

axios实现ajax。基于peomise

 ajax({
    type: ‘post‘,
    url: baseURL + ‘url‘,
    data: {
      method: ‘method‘,
      accessToken: options.accessToken,
      product_id: options.id,
      product_code: options.code,
      price: options.price
    }
  }).then(function (res) {
    console.log(res);
  }, function (err) {
    console.log(err);
  });

ajax的优点:

1.实现页面的无刷新。

2.按需请求数据。

ajax的缺点:

对浏览器后退机制的破坏

Http常见的状态码:

一:2开头状态码

    2xx (成功)表示成功处理了请求的状态代码

二:3开头状态码

    3xx (重定向) 表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。

    304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。

三:4开头状态码

    4xx(请求错误) 这些状态代码表示请求可能出错,妨碍了服务器的处理。 

1:400 (错误请求) 服务器不理解请求的语法。

2:403 (禁止) 服务器拒绝请求。

3:404 (未找到) 服务器找不到请求的网页。

四:5开头状态码

    5xx(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。 

500 (服务器内部错误) 服务器遇到错误,无法完成请求。

501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。

502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。

503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。

504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。

505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

原文地址:https://www.cnblogs.com/hudunyu/p/11736309.html

时间: 2024-10-25 22:10:51

前端随心记---------Ajax原理及实现跨域方法的相关文章

前端随心记---------Ajax,Comet,Websocket

从WebScoket中我们了解到Ajax的轮询问题,WebScoket协议中服务器和客户端只要进行一次握手,就能创建一条通道实现数据的相互传送.而Ajax轮询,在特定的时间间隔内向服务器发送请求,以达到对数据的推送,这样导致浪费了很多无谓的网络带宽,因此产生疑问:为了达到高效且资源利用最大化的角度,WebScoket为什么没有淘汰定时轮询这种机制呢? 什么是Websocket Websocket是HTML5中提出的新的协议,注意,这里是协议,可以实现客户端与服务器端的通信,实现服务器的推送功能.

深入理解前端跨域方法和原理

前言 受浏览器同源策略的限制,本域的js不能操作其他域的页面对象(比如DOM).但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦.所以我们要通过一些方法使本域的js能够操作其他域的页面对象或者使其他域的js能操作本域的页面对象(iframe之间). 这里需要明确的一点是:所谓的域跟js的存放服务器没有关系,比如baidu.com的页面加载了google.com的js,那么此js的所在域是baidu.com而不是google.com.也就是说,此时该js能操作baidu.co

你不知道的jQuery Item11 -- ajax jsonp跨域方法详解

文章从JSON和JSONP区别开始讲起,用实例来对比他们之间的不同之处,然后详细讲解了jQuery中的ajax jsonp的使用并给出了示例及详细参数说明. 1.JSON和JSONP JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,用于在浏览器和服务器之间交换信息. JSONP(JSON With Padding),就是打包在函数调用中的的JSON(或者包裹的JSON),你要跨域请求别人的东西,你肯定要包裹起来,不要污染了别人的东西,把Json数据包裹

js中几种实用的跨域方法原理详解(转)

今天研究js跨域问题的时候发现一篇好博,非常详细地讲解了js几种跨域方法的原理,特分享一下. 原博地址:http://www.cnblogs.com/2050/p/3191744.html 下面正文开始 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作是不同的域. 下表给出了相对http://store.company.com/dir/pag

js中几种实用的跨域方法原理详解

这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作是不同的域. 下表给出了相对http://store.company.com/dir/page.html同源检测的结果: 要解决跨域的问题,我们可以使用以下几种方法: 一.通过jsonp跨域 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的.但是,在页面上引入不同

[转]js中几种实用的跨域方法原理详解

转自:js中几种实用的跨域方法原理详解 - 无双 - 博客园 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作是不同的域. 下表给出了相对http://store.company.com/dir/page.html同源检测的结果: 要解决跨域的问题,我们可以使用以下几种方法: 一.通过jsonp跨域 在js中,我们直接用XMLHttpRequ

[转载] js中几种实用的跨域方法原理详解

框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作是不同的域. 下表给出了相对http://store.company.com/dir/page.html同源检测的结果: 要解决跨域的问题,我们可以使用以下几种方法: 一.通过jsonp跨域 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的.但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的. 比如,有个a.html页面,它里面的代码需要利用ajax获取一

javascript 中几种实用的跨域方法原理详解(转)

原文:http://blog.csdn.net/primary_wind/article/details/40062985 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作是不同的域. 下表给出了相对http://store.company.com/dir/page.html同源检测的结果: 要解决跨域的问题,我们可以使用以下几种方法: 一.

【转】js中几种实用的跨域方法原理详解

这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作是不同的域. 下表给出了相对http://store.company.com/dir/page.html同源检测的结果: 要解决跨域的问题,我们可以使用以下几种方法: 一.通过jsonp跨域 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的.但是,在页面上引入不同