ajax

作者: efho | 来源:发表于2020-10-08 18:59 被阅读0次

    form发POST、GET,但是要刷新页面或新开页面

    a可以发GET,但是要刷新页面或新开页面

    img可以发GET,但是只能图片形式展示

    link可以发GET请求,但是只能以CSS、favicon形式展示

    script可以发GET请求,但是只能以脚本形式运行

    需要一个API可以发GET、POST、PUT、DELETE请求,且以什么形式展示都可以


    A: asyn 异步 J : JavaScript  A:and X:XML

    1. XMLHttpRequest发请求

    2.服务器返回XML格式字符串(现在用JSON)

    3.JS解析XML,并更新局部页面

    知道可以处理xml就行了(DOM操作xml),过时没什么用了已经。。


    JSON:新的语言(仿JavaScript作者顺便损了一下js)

    1.json没有抄袭 function、undefined

    2.json字符串首尾必须是双引号 "

    JS VS JSON

    undefined  没有

    null    null

    ['a', 'b']      ["a", "b"]

    function fn(){}       没有

    {name: 'frank'}        {"name":"frank"}

    'frank'         "frank"

    var a = {}; a.self = a           搞不定(没有变量)不能自己引用自己


    同源策略:如果你的js不是baidu.com页面里的,就不能向baidu.com发任何ajax请求,其他请求可以,像form什么的。

    浏览器必须保证 只有协议+端口+域名一模一样,才允许发ajax请求

    1. http://baidu.com 可以向 http://www.baidu.com 发请求吗  ??  不行

    2. http://baidu.com:80 可以向 http://baidu.com:81发请求吗??  不行   

    要想访问,必须另一个网站的人设置  

    可以用JSONP!!具体再复习吧,用Ajax的话需要:CORS可以告诉浏览器,我俩一家的,别阻止他。后台代码加一句(响应头):

    response.setHeader('Access-Control-Allow-Origin', 'http://frank.com:8001')

    CORS:(Cross-origin resource sharing)


    深入ajax/自己实现/promise

    ajax可以获取(有的可以修改)请求/响应中的4部分内容

    GET /xxx HTTP/1.1

    HOST: nn.com:8888

    Content-Type: application/x-www.url-encoded

    1.js可以设置任意请求header吗   可以

    第一部分 request.open('get', '/xxx')

    第二部分 request.setHeader('content-type', 'application/x-www.url-encoded')

    第四部分 request.send('wo wo wo ')

    HTTP/1.1 200 OK

    Content-Type: text/html

    <!DOCTYPE html>

    <html></html>

    2.js可以获取任意响应header吗? 可以

    第一部分 request.status / request.statusText (OK)

    第二部分 request.getResponseHeader() / request.getAllResponseHeaders()

    第四部分 request.responseText


    ajax 封装

    jQuery ajax


    promise

    不用取名字,标准化

    自己封装jQuery ajax!!!重要背下来

    window.jQuery.ajax = function ({

        url,

        method,

        body,

        headers

    }) {

        return new Promise(function (resolve, reject) {

            let request = new XMLHttpRequest()

            request.open(method, url) // set request

            for (let key in headers) {

                let value = headers[key]

                request.setRequestHeader(key, value)

            }

            request.onreadystatechange = () => {

                if (request.readyState === 4) {

                    if (request.status >= 200 && request.status < 300) {

                        resolve.call(undefined, request.responseText)

                    } else if (request.status >= 400) {

                        console.log('说明请求失败')

                        reject.call(undefined, request)

                    }

                }

            }

            request.send(body)

        })

    }

    window.Promise = function(fn){

    // ....

        return {

        then: function

      }

     window.Promise 等于1个函数,接受一个函数作为参数,return一个对象,对象中有then这一属性,使用它的实例就调用return的对象的then,ajax返回promise实例,其中含有then属性


    相关文章

      网友评论

          本文标题:ajax

          本文链接:https://www.haomeiwen.com/subject/pbkoyktx.html