Ajax 及跨域

  • XMLHttpRequest

这是 ajax 最基本的一个 API 对象,用于在后台与服务器交换数据。
下面是 ajax 的源码(原理框架),再复杂的也是以这个为基础的。

- var xhr = new XMLHttpRequest()
- xhr.open("GET", "/api", false)
- xhr.onreadystatechange = function () {
-       if (xhr.readyState == 4) {
+             if (xhr..status == 200) {
-                   alert(xhr.responseText)
-             }
-       }
- }
+ xhr.send(null)

第一行:通过 XMLHttpRequest() 生成一个对象。
第二行:运行 open,传入形式、路径已经设定为异步。
第四行:判定对象的 readyState 是否为 4(完成)。
第五行:判定对象的 staus 是否为 200(返回成功)(由服务器返回)。
第六行:弹窗显示该对象从服务器那返回接收到的内容。
第十行:对象向服务器发送 null 。
第三至九行:
定义一个函数,由上设置,这是一个异步函数。
所以它并不会马上执行(都没还发送,它的就绪状态当然是不存在的),
当发送后, readyState 和 status 都会有所变化,从而触发函数运行。

  • readyState

    (客户端的工作状态码)

    • 0 —(未初始化)还没有调用 send() 方法
    • 1 —(载入)已经调用 send() 方法,正在发送请求
    • 2 —(载入完成)send() 方法执行返程,已经接收到全部响应内容
    • 3 —(交互)正在解析接收到的响应内容
    • 4 —(完成)响应内容解析完成,可以再客户端调用
  • status

    (服务器返回的处理结果)

    • 2xx — 表示成功处理请求,客户端可以使用,如 200
    • 3xx — 需要重定向,浏览器收到信息后直接自己跳转
    • 4xx — 客户端请求错误,如 404 就代表客户端请求的地址错误
    • 5xx — 服务端错误,服务器的工作有错误,无法返回对应信息


  • 跨域

    • 浏览器有同源策略(出于安全),不允许 ajax 访问其他域接口

    • 只要协议、域名、端口其中一个不同,都算作跨域

    • 有三类标签允许跨域加载资源:

你可能感兴趣的:(Ajax 及跨域)