jQuery Ajax

1.基本使用

  • 调用ajax()并传入其他参数,请求url必填,可放第一个参数位置,也可以放入opstion中
<script>
    //方式一
   $.ajax('/api/test',{})
   //方式二
   $.ajax({
    url:"/api/test"
   })
</script>

2.get请求

  • 通过type属性设定请求方式,可以不写,默认就是get请求
  • 请求参数:无论参数是json对象,还是urlencoded字符串,都兼容,如果是表单元素,可以使用serialize()进行转换
<script>
   $.ajax({
        url:"/api/test",
        data: "name=kyo",
        success(res,status,jqXHR){
            console.log('success',arguments)
        },
   })
   //等价于
   $.ajax({
        url:"/api/test",
        data: {
            name:"kyo"
        },
        success(res,status,jqXHR){
            console.log('success',arguments)
        },
   })

   $('form').serialize() //username=q111&psw=111
</script>

3.post请求

  • 将type属性设定post,请求的参数将通过请求体进行提交
  • 请求参数:遇到json对象格式,默认将其进行转换表单格式
<script>
   $.ajax({
        url:"/api/test",
        type: "post",
        data: {
            page: 1, limit: 10
        }
   })
</script>


  • 如果要传递json格式,只需要将 contentType 设置成 json,之后会将data数据视为JSON字符串进行转换后条件,所以data的值要转换成JSON字符串
<script>
   var data = {
       name:"kyo"
   }
   $.ajax({
        url:"/api/test",
        type: "post",
        data: JSON.stringify(data),
        contentType: 'json',
        success(res,status,jqXHR){
            console.log('success',arguments)
        },
   })
</script>


4.回调函数

  • success:成功回调,第一个参数就是后台的返回结果
  • error:失败回调
  • complete:请求完成后回调函数 (请求success 和 error之后均调用)
<script>
   $.ajax({
        url:"/api/test",
        success(res,status,jqXHR){
            console.log('success',arguments)
        },
        error(jqXHR,status){
            console.log('error',arguments)
        },
        complete(jqXHR,status){
            console.log('complete',arguments)
        }
   })
</script>

5.其他方法

  • $.get(URL,data,function(data,status,xhr),dataType):发送一个 HTTP GET 请求到页面并取回结果
  • $.post(URL,data,function(data,status,xhr),dataType):使用 HTTP POST 请求从服务器加载数据
  • $.getJSON(url,data,success(data,status,xhr)):使用 HTTP GET 请求从服务器加载 JSON 编码的数据
  • $(selector).load(URL,data,callback):加载内容并渲染到目标Dom
<script>
   $('#box').load('/test.txt')
</script>

  • $.getScript():使用一个HTTP GET请求从服务器加载并执行一个 JavaScript 文件(创建script标签并执行,之后移除该script标签)
<script>
   //执行远程index.js的代码
   $.getScript('/index.js')
</script>

6.jQuery的jsonp

  • 由来:解决浏览器同源策略导致跨域请求失败的问题
  • 原理:前端利用script不受同源策略影响,动态插入一个script标签,script标签加载完毕后会立即执行里面的代码
  • 详细步骤:动态插入一个script标签并设定src地址(通过get参数告诉后端所需的接口参数和callbackFunction,callbackFunction要提前定义好),后端拿到此请求后,返回一段js代码,代码内容就是直接调用callbackFunction(),并传入数据,这样就完成了跨域请求,此种方法需要前后端同时配合
  • jQuery的$.getScript()方法适合完成这个jsonp请求
//前端代码

<script>
    //定义回调
    function printRes(result)
    {
        console.log('callbackFunction执行了')
        console.log('result',result)
    }

    //加载script标签并执行代码,参数告知后端要调用的回调名称
    $.getScript('http://127.0.0.1:8087/jsonp?jsoncallback=printRes')
</script>
//后端代码 Node.js

//引入express
const express = require("express")
//创建服务对象
let app = express()


//设置路由,监听根路径的访问
app.get("/jsonp",function(req,res){
    //获取回调名称
    var jsoncallback = req.query.jsoncallback
    //要返回的数据
    var data = {name:"kyo"}
    //拼接代码
    var code = `${jsoncallback}(${JSON.stringify(data)})`
    //返回数据
    res.send(code)
})

//开启服务,监听80端口
var server = app.listen(8087,function(){
    
    //当前当前监听的端口号
    var port = server.address().port
    console.log(`Server running at http://127.0.0.1:${port}/`)
})

  • 通用方法:$.ajax()执行jsonp
<script>
    function updatePage(obj){
        var h1 = document.querySelector("h1")
        var p = document.querySelector("p")
        h1.innerHTML = obj.title
        p.innerHTML = obj.content
    }
    //监听按钮点击
    $("#btn").on("click",function(){
        console.log("click")
        $.ajax({
            url:"./jsonp/index.js",
            type:"get",
            dataType: "jsonp",
            data:{
                id:1
            },
            jsonp:"cb",// 要调用的客户端函数的key
            jsonpCallback:"updatePage",//客户端函数名称
            success:function(data){
                console.log(data)
            }
        })
    })

  //运行代码会访问这个url
  //http://localhost:8080/jsonp/index.js?cb=updatePage&id=1
</script>
posted @ 2019-10-06 22:22  ---空白---  阅读(233)  评论(0编辑  收藏  举报