收款定制开发Ajax--》请求操作以及跨域相关讲解

目录


jQuery中的Ajax

在jQuery收款定制开发中应该如何发送呢?收款定制开发看到这篇文章你就能大收款定制开发概了解到如何在jQuery中发送Ajax。

要想使用jQuery框架,收款定制开发肯定是需要引进jQuery资源的,收款定制开发有两种方式,收款定制开发一种是将资源下载到本地,收款定制开发另一种是直接引入网站jQuery链接,收款定制开发推荐大家一个比较好用的网站: 收款定制开发其网站致力于为许多像 Bootstrap、jQuery、、Vuejs 收款定制开发一样优秀的前端开源项收款定制开发目提供稳定、收款定制开发快速的免费 CDN 加速服务。

收款定制开发点击相关需求,收款定制开发引入相关链接到HTML里面即可,请看如下操作:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  9. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.min.js"></script>
  10. </head>
  11. <body>
  12. <div class="container">
  13. <h2 class="page-header">jQuery发送Ajax请求</h2>
  14. <button class="btn btn-paimary">GET</button>
  15. <button class="btn btn-danger">POST</button>
  16. <button class="btn btn-info">通用型方法</button>
  17. </div>
  18. <script>
  19. $('button').eq(0).click(function(){
  20. // 参数分别是 url 参数对象 回调函数 响应体类型-json
  21. $.get('http://127.0.0.1:8000/jquery',{a:100,b:200},function(data){
  22. console.log(data);
  23. },'json')//加了json返回的结果是一个对象
  24. })
  25. $('button').eq(1).click(function(){
  26. $.post('http://127.0.0.1:8000/jquery',{a:100,b:200},function(data){
  27. console.log(data);
  28. })//不加json返回的结果是一个字符串
  29. })
  30. </script>
  31. </body>
  32. </html>
  1. // 1.引入express
  2. const { response } = require('express')
  3. const express = require('express')
  4. // 2.创建应用对象
  5. const app = express()
  6. // 3.jQuery服务
  7. app.all('/jquery',(request,response)=>{
  8. // 设置响应头
  9. response.setHeader('Access-Control-Allow-Origin','*')
  10. // response.send('hello jQuery')
  11. const data = {name:'张三'}
  12. response.send(JSON.stringify(data))
  13. })
  14. // 4.监听端口启动服务
  15. app.listen(8000,()=>{
  16. console.log('服务已经启动,8080端口监听中....');
  17. })

这里借用了一点bootstarp样式来修改一下CSS属性,让样式更好看点。

上面讲解了get和post请求操作,如果想单独设置个性化强一点的Ajax请求操作,可以选择通用型操作,代码如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  9. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.min.js"></script>
  10. </head>
  11. <body>
  12. <div class="container">
  13. <h2 class="page-header">jQuery发送Ajax请求</h2>
  14. <button class="btn btn-paimary">GET</button>
  15. <button class="btn btn-danger">POST</button>
  16. <button class="btn btn-info">通用型方法</button>
  17. </div>
  18. <script>
  19. $('button').eq(2).click(function(){
  20. $.ajax({
  21. // url
  22. url:'http://127.0.0.1:8000/jquery',
  23. // 参数
  24. data:{a:100,b:200},
  25. // 请求类型
  26. type:'GET',
  27. // 响应体结果设置
  28. dataType:'json',
  29. // 成功的回调
  30. success:function(data){
  31. console.log(data);
  32. },
  33. // 超时时间
  34. timeout:2000,
  35. // 失败的回调
  36. error:function(){
  37. console.log('出错了!!');
  38. },
  39. // 头信息
  40. headers:{
  41. c:300,
  42. d:400
  43. }
  44. })
  45. })
  46. </script>
  47. </body>
  48. </html>

请求超时与网络异常处理

请求超时:当我们进行服务器数据传输时因为网络原因出现超时问题,我们设置超时规则来提示用户网络超时

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. #result {
  10. width: 200px;
  11. height: 100px;
  12. border: 1px solid #008c8c;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <button>点击发送请求</button>
  18. <div id="result"></div>
  19. <script>
  20. const btn = document.querySelector('button')
  21. const result = document.querySelector('#result')
  22. btn.addEventListener('click',function(){
  23. const xhr = new XMLHttpRequest()
  24. // 超时2s设置取消
  25. xhr.timeout = 2000
  26. // 超时回调
  27. xhr.ontimeout = function(){
  28. alert('网络异常,请稍后重试!!')
  29. }
  30. xhr.open('GET','http://127.0.0.1:8000/delay')
  31. xhr.send()
  32. xhr.onreadystatechange = function(){
  33. if(xhr.readyState === 4){
  34. if(xhr.status >= 200 && xhr.status < 300){
  35. result.innerHTML = xhr.response
  36. }
  37. }
  38. }
  39. })
  40. </script>
  41. </body>
  42. </html>

设置express服务

  1. // 1.引入express
  2. const { response } = require('express')
  3. const express = require('express')
  4. // 2.创建应用对象
  5. const app = express()
  6. // 3.延时响应
  7. app.get('/delay',(request,response)=>{
  8. // 设置响应头
  9. response.setHeader('Access-Control-Allow-Origin','*')
  10. // 设置延时效果
  11. setTimeout(()=>{
  12. // 设置响应体
  13. response.send('延时响应')
  14. },3000)
  15. })
  16. // 4.监听端口启动服务
  17. app.listen(8000,()=>{
  18. console.log('服务已经启动,8080端口监听中....');
  19. })

网络异常:访问网站时,如果网络突然断掉,通过Ajax来提醒我们网络断开。

取消请求

既然Ajax可以请求数据,那我们也可以将Ajax请求的数据取消也可以的,这里需要借助Ajax的一个属性 abort 来进行操作。案例如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <button>点击发送请求</button>
  11. <button>点击取消请求</button>
  12. <script>
  13. const btns = document.querySelectorAll('button')
  14. // 将x设置为全局变量
  15. let x = null
  16. btns[0].addEventListener('click',function(){
  17. x = new XMLHttpRequest()
  18. x.open('GET','http://127.0.0.1:8000/delay')
  19. x.send()
  20. })
  21. // 取消方法 abort
  22. btns[1].addEventListener('click',function(){
  23. x.abort()
  24. })
  25. </script>
  26. </body>
  27. </html>

当然我也设置一个延时服务来进行数据还没有请求完就取消的过程。

取消重复请求

在日常浏览网页中,可以由于一些网络或其他原因导致用户疯狂的进行数据请求,这样一来,用户的数量一高请求的数据就很庞大,导致服务器承受不住这么大的流量,所以我们就要进行取消重复的操作来缓解服务器的压力。操作过程如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <button>点击发送请求</button>
  11. <script>
  12. const btns = document.querySelector('button')
  13. // 将x设置为全局变量
  14. let x = null
  15. // 标识变量
  16. let isSending = false
  17. btns.addEventListener('click',function(){
  18. // 判断标识变量
  19. if(isSending) x.abort()//如果正在发送,则取消该请求,创建一个新的请求
  20. x = new XMLHttpRequest()
  21. // 修改 标识变量的值
  22. isSending = true
  23. x.open('GET','http://127.0.0.1:8000/delay')
  24. x.send()
  25. x.onreadystatechange = function(){
  26. if(x.readyState === 4){
  27. // 修改标识变量
  28. isSending = false
  29. }
  30. }
  31. })
  32. </script>
  33. </body>
  34. </html>

提供express服务

  1. // 1.引入express
  2. const { response } = require('express')
  3. const express = require('express')
  4. // 2.创建应用对象
  5. const app = express()
  6. // 3.延时响应
  7. app.get('/delay',(request,response)=>{
  8. // 设置响应头
  9. response.setHeader('Access-Control-Allow-Origin','*')
  10. // 设置延时效果
  11. setTimeout(()=>{
  12. // 设置响应体
  13. response.send('延时响应')
  14. },3000)
  15. })
  16. // 4.监听端口启动服务
  17. app.listen(8000,()=>{
  18. console.log('服务已经启动,8080端口监听中....');
  19. })

Ajax请求—fetch()

fetch()方法用于发起获取资源的请求,它返回一个promise,这个promise会在请求响应后被resolve,并传回 response 对象。注意:fetch()方法的参数与request()构造器是一样的。

  1. <body>
  2. <button>Ajax请求</button>
  3. <script>
  4. const btn = document.querySelector('button')
  5. btn.addEventListener('click',function(){
  6. fetch('http://127.0.0.1:8000/fetch',{
  7. // 请求方法
  8. method:'POST',
  9. // 请求头
  10. headers:{
  11. name:'zhangsan'
  12. },
  13. // 请求体
  14. body:'username=admin&password=admin'
  15. }).then(response=>{
  16. return response.json()
  17. }).then(response=>{
  18. console.log(response);
  19. })
  20. })
  21. </script>
  22. </body>
  1. // 1.引入express
  2. const { response } = require('express')
  3. const express = require('express')
  4. // 2.创建应用对象
  5. const app = express()
  6. // 3.fetch服务
  7. app.all('/fetch',(request,response)=>{
  8. // 设置响应头
  9. response.setHeader('Access-Control-Allow-Origin','*')
  10. response.setHeader('Access-Control-Allow-Headers','*')
  11. // response.send('hello jQuery')
  12. const data = {name:'张三'}
  13. response.send(JSON.stringify(data))
  14. })
  15. // 4.监听端口启动服务
  16. app.listen(8000,()=>{
  17. console.log('服务已经启动,8080端口监听中....');
  18. })

跨域

同源策略(Same-Origin-Policy)最早由 Netscape 公司提出,是浏览器的一种安全策略。同源就是协议、域名、端口号必须完全相同,违背同源策略就是跨域。Ajax默认遵循同源策略。

  1. <body>
  2. <button>点击获取用户数据</button>
  3. <script>
  4. const btn = document.querySelector('button')
  5. btn.addEventListener('click',function(){
  6. const x = new XMLHttpRequest()
  7. // 因为是满足同源策略的,所以url是可以简写的
  8. x.open('GET','/data')
  9. x.send()
  10. x.onreadystatechange = function(){
  11. if(x.readyState === 4){
  12. if(x.status >= 200 && x.status <300){
  13. console.log(x.response);
  14. }
  15. }
  16. }
  17. })
  18. </script>
  19. </body>
  1. const { response, request } = require('express')
  2. const express = require('express')
  3. const app = express()
  4. app.get('/home',(request,response)=>{
  5. // 响应一个页面
  6. response.sendFile(__dirname+'/index.html')
  7. })
  8. app.get('/data',(request,response)=>{
  9. response.send('用户数据')
  10. })
  11. app.listen(9000,()=>{
  12. console.log('9000端口开启,服务已启动...');
  13. })

如何解决跨域

JSONP,是一个非官方的跨域解决方案,由程序员开发出来,只支持get请求。在网页中有一些标签天生具有跨域能力,比如:img、link、iframe、script等,JSONP就是利用script标签的跨域能力来发送请求的。

原理:返回函数调用,并把参数放在里面,让前端的函数对它进行一个处理,用服务端代码去响应JS代码。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. #result {
  10. width: 300px;
  11. height: 200px;
  12. border: 1px solid #008c8c;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <div id="result"></div>
  18. <script>
  19. // 处理函数
  20. function handle (data) {
  21. // 获取元素
  22. const result = document.querySelector('#result')
  23. result.innerHTML = data.name
  24. }
  25. </script>
  26. <!-- <script src="./app.js"></script> -->
  27. <script src="http://127.0.0.1:8000/jsonp"></script>
  28. </body>
  29. </html>

原生JS代码

  1. const data = {
  2. name:'张三'
  3. }
  4. handle(data)

express服务

  1. // 1.引入express
  2. const { response } = require('express')
  3. const express = require('express')
  4. // 2.创建应用对象
  5. const app = express()
  6. // 3.JSONP服务
  7. app.all('/jsonp',(request,response)=>{
  8. // response.send('console.log("hello jsonp");')
  9. const data = {
  10. name:'张三'
  11. }
  12. // 将数据转换为字符串
  13. let str = JSON.stringify(data)
  14. // 返回结果 end()不会加特殊响应头
  15. // 返回的结果是一个函数调用,而函数的实参就是我们想给客户端返回的结果数据
  16. response.end(`handle(${str})`)
  17. })
  18. // 4.监听端口启动服务
  19. app.listen(8000,()=>{
  20. console.log('服务已经启动,8080端口监听中....');
  21. })

jsonp实践

  1. <body>
  2. 用户名:<input type="text" id="username">
  3. <p></p>
  4. <script>
  5. // 获取 input 元素
  6. const input = document.querySelector('input')
  7. const p = document.querySelector('p')
  8. // 声明 handle 函数
  9. function handle (data) {
  10. input.style.border = "solid 1px #f00"
  11. // 修改 p 标签的提示文本
  12. p.innerHTML = data.msg
  13. }
  14. // 绑定事件
  15. input.onblur = function () {
  16. // 获取用户的输入值
  17. let username = this.value
  18. // 向服务器发送请求,检测用户名是否存在
  19. // 1.创建 script 标签
  20. const script = document.createElement('script')
  21. // 2.设置标签的 src 属性
  22. script.src = 'http://127.0.0.1:8000/username'
  23. // 3.将script插入到文档中
  24. document.body.appendChild(script)
  25. }
  26. </script>
  27. </body>

jQuery实现发送jsonp请求

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. #result {
  10. width: 300px;
  11. height: 200px;
  12. border: 1px solid #008c8c;
  13. }
  14. </style>
  15. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.min.js"></script>
  16. </head>
  17. <body>
  18. <button>点击发送 jsonp 请求</button>
  19. <div id="result">
  20. </div>
  21. <script>
  22. $('button').eq(0).click(function(){
  23. $.getJSON('http://127.0.0.1:8000/jquery?callback=?',function(data){
  24. $('#result').html(`
  25. 名称:${data.name},<br>
  26. 科目:${data.subject}
  27. `)
  28. })
  29. })
  30. </script>
  31. </body>
  32. </html>
  1. // 1.引入express
  2. const { response } = require('express')
  3. const express = require('express')
  4. // 2.创建应用对象
  5. const app = express()
  6. // 3.jQuery服务
  7. app.all('/jquery',(request,response)=>{
  8. // response.send('hello jQuery')
  9. const data = {
  10. name:'张三',
  11. subject:['语文','数学','英语']
  12. }
  13. let str = JSON.stringify(data)
  14. // 接收 callback 参数
  15. let cb = request.query.callback
  16. // 返回结果
  17. response.end(`${cb}(${str})`)
  18. })
  19. // 4.监听端口启动服务
  20. app.listen(8000,()=>{
  21. console.log('服务已经启动,8080端口监听中....');
  22. })

CORS:跨域资源共享 。CORS是官方的跨域解决方案,它的特点是不需要在客户端做任何特殊的操作,完全在服务器中进行处理,支持get和post请求,跨域资源共享标准新增了一组HTTP首部字段,允许服务器声明哪些源站通过浏览器有权限访问哪些资源。

CORS是通过设置一个响应头来告诉浏览器,该请求允许跨域,浏览器收到该响应以后就会对响应放行。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <button>点击发送请求</button>
  11. <script>
  12. const btn = document.querySelector('button')
  13. btn.addEventListener('click',function(){
  14. // 1.创建对象
  15. const x = new XMLHttpRequest()
  16. // 2.初始化设置
  17. x.open('GET','http://127.0.0.1:8000/cors')
  18. // 3.发送
  19. x.send()
  20. // 4.绑定事件
  21. x.onreadystatechange = function(){
  22. if(x.readyState ===4 ){
  23. if(x.status >= 200 && x.status < 300){
  24. // 输出响应体
  25. console.log(x.response );
  26. }
  27. }
  28. }
  29. })
  30. </script>
  31. </body>
  32. </html>
  1. // 1.引入express
  2. const { response } = require('express')
  3. const express = require('express')
  4. // 2.创建应用对象
  5. const app = express()
  6. // 3.CORS
  7. app.all('/cors',(request,response)=>{
  8. // 设置响应头
  9. response.setHeader('Access-Control-Allow-Origin','*')
  10. response.send('hello cors')
  11. })
  12. // 4.监听端口启动服务
  13. app.listen(8000,()=>{
  14. console.log('服务已经启动,8080端口监听中....');
  15. })

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发