Ajax跨域问题的详细介绍

这次给大家带来Ajax跨域问题的详细介绍,使用Ajax跨域问题的注意事项有哪些,下面就是实战案例,一起来看一下。

什么是ajax

Ajax(Asynchronous JavaScript and XML),是一种可以向服务器请求额外的数据并且无需刷新页面的技术,ajax的出现带来了更好的用户体验.

Ajax的核心就是XMLHttpRequest(XHR)对象.XHR为向服务器发送请求和解析服务器响应提供了流畅的接口.可以使用XHR对象获取新数据,通过DOM将新数据插入到页面.虽然名字中包含XML,但是ajax通信和数据格式无关;这种技术就是可以不用刷新就从服务器获取数据,但是不一定是XML数据,也可以是json.

XMLHttpRequest对象

XHR的用法

1.创建一个XMLHttpRequest对象

2.发送请求

1).设置请求行 xhr.open()
2).POST请求需要设置请求头 xhr.setRequestHeader() POST请求头Content-Type的值: application/x-www-form-urlencoded
3).设置请求体 xhr.send() get请求传null,post根据情况

3.处理服务器响应

先判断响应状态码和异步对象是否解析完毕.

服务器返回的状态码 status

1xx:消息
2xx:成功
3xx:重定向
4xx:请求错误
5xx:服务器错误

异步对象的状态码 readystate

0:异步对象已经创建
1:异步对象初始化完成,发送请求
2:接收服务器返回的原始数据
3:数据正在解析,解析需要时间
4:数据解析完成,数据可以使用了

XML

XML的特点,出身名门,W3C制定,微软和IBM曾经共同大力推荐过的数据格式.XML 指可扩展标记语言(Extensible Markup Language),被设计用来传输和存储数据,HTML 是设计用来表示页面的.

语法规则:和HTML差不多,都是通过标记来表示的

特殊符号:比如要使用实体-转移字符

xml的解析需要前后台配合:
1.后台在返回的时候,在响应头中设置Content-Type的值为 application/xml
2.前台异步对象在接收后台数据时,记得按照xml的方式来接收,xhr.responseXML,并且它返回的是一个object对象,内容是#document

JSON

JSON(JavaScript Object Notation),出身草根,是 Javascript 的子集,专门负责描述数据格式.JSON本身是一个特殊格式的字符串,可以转换成js对象,是网络上用来传输数据使用最广泛的数据格式,没有之一.

语法规则:数据以 key/value 值对表示,数据由逗号分隔,大括号保存对象,中括号保存数组,名称和值都需要使用双引号包含(这个是和js的一点小区别).
js中解析/操作JSON:
1.JSON.parse(json字符串); 将一个json格式的字符串解析成js对象
2.JSON.stringify(js对象); 将一个js对象转成一个json格式的字符串

自己封装一个ajax

function pinjieData(obj) { //obj 就相当于 {key:value,key:value} //最终拼接成键值对的字符串 "key:value,key:value" var finalData = ""; for(key in obj){  finalData+=key+"="+obj[key]+"&"; //key:value,key:value& } return finalData.slice(0,-1);//key:value,key:value}function ajax(obj) { var url = obj.url; var method = obj.method.toLowerCase(); var success = obj.success; var finalData = pinjieData(obj.data); //finalData最终的效果key:value,key:value //1.创建xhr对象 var xhr = new XMLHttpRequest(); //get方法拼接地址,xhr.send(null) if (method=='get'){  url = url + "?"+finalData;  finalData = null; } //2.设置请求行 xhr.open(method,url); // 如果是post请求,要设置请求头 if (method=='post'){  xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded") } //3.发送 xhr.send(finalData); //4.监听服务器返回的数据 xhr.onreadystatechange = function () {  if (xhr.status==200 && xhr.readyState==4){   var result = null;   //获取返回的数据类型   var rType = xhr.getResponseHeader("Content-Type");   if (rType.indexOf('xml')!=-1){    result = xhr.responseXML;   }else if(rType.indexOf('json')!=-1){    // JSON.parse 的意思是 将 json格式的字符串    //比如 [{ "src":"./images/nav0.png","content":"商品分类1"}]    //转成js对象    result = JSON.parse(xhr.responseText);   }else{//当成普通的字符串去处理    result = xhr.responseText;   }   //将这里解析好的数据交给页面去渲染   success(result);  } }}

登录后复制

jQuery中使用ajaxAPI jQuery ajax

jQuery为我们提供了更便利的ajax封装使用.

$.ajax({}) 可以配置方式发起ajax请求
$.get() 以get方式发起ajax请求
$.post() 以post方式发起ajax请求
$(‘form’).serialize() 序列化表单(格式化key=val$key=val)

参数说明

url :接口地址
type :请求方式(get/post)
timeout : 要求为Number类型的参数,设置请求超时时间(毫秒)
dataType: 应该是客户端传递给服务器一个值,告诉服务器如何进行处理:
data: 发送请求数据
beforeSend: 要求为Function类型的参数,发送请求前可以修改XMLHttpRequest对象的函数,例如添加自定义HTTP头。在beforeSend中如果返回false可以取消本次ajax请求.
success: 成功响应后调用
error: 错误响应时调用
complete: 响应完成时调用(包括成功和失败)

 //ajax===get $.ajax({  url:'',  data:'key=value&key=value',  type:'get',  success:function (result) {   console.log(result);  } });//ajax===post$.ajax({  url:'',  data:'key=value&key=value',  type:'post',  success:function (result) {   console.log(result);  } });//$.get$.get({  url:'',  data:'key=value&key=value',  success:function (result) {  console.log(result);  }});//$.post$.post({  url:'',  data:'key=value&key=value',  success:function (result) {  console.log(result);  }});//在使用jQuery中ajax发送请求的时候,只需要在 dataType中写上jsonp即可实现ajax的跨域请求 dataType:'jsonp'

登录后复制

跨域

通过XHR实现ajax通信的一个主要限制(相同域,相同端口,相同协议),来源于跨服安全策略,默认情况下,XHR只能请求同一域的资源,这是为了防止某些恶意的行为.

CORS跨域

CORS(cross-origin resource sharing,跨域源资源共享)定义了在跨域时,浏览器和服务器应该如何沟通.CORS允许一个域上的网络应用向另一个域提交跨域 AJAX 请求。实现此功能非常简单,只需由服务器发送一个响应标头即可。
CORS支持所有类型的HTTP请求.
服务器端对于CORS的支持,主要就是通过设置Access-Control-Allow-Origin来进行的。

JSONP

JSONP由回调函数和数据组成.JSONP只支持GET请求.JSONP的优势在于支持老式浏览器,以及可以向不支持CORS的网站请求数据.
JSONP通过动态元素来使用,src属性知道一个跨域URL,JSONP是有效的JavaScript代码,浏览器可以跨域请求JS文件.
优点:简单易用,可以直接访问响应文本,支持在浏览器和服务器之间双向通信.
缺点:1.JSONP是从其他域加载代码执行,存在不安全风险.2.不好确定JSONP请求是否成败.

通过修改document.domain来跨子域

使用window.name来进行跨域

HTML5中新引进 window.postMessage方法来跨域传送数据

flash

iframe

服务器设置代理页面

图像Ping

通过使用标签,利用网页可以从任何网页加载图像原理.
图像Ping常用于跟踪用户点击页面或动态广告曝光次数.

2个缺点:1.只支持GET请求.2.无法访问服务器的响应文本.只能用于浏览器与服务器间的单项通信.

var img = new Image();img.onload = img.onerror = function (){alert("Done!");};img.src = "";

登录后复制

comet

一种更高级的ajax技术.ajax是页面向服务器请求数据的技术.comet是服务器向页面推送数据的技术.

SSE (Server-Sent Events) 服务器发送事件

Web Sockets

Web Sockets的目标是在一个单独的持久链接上提供全双工,双向通信.

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

PHP+Ajax如何实现表格的实时编辑

用ajax实现session超时跳转到登录页面

以上就是Ajax跨域问题的详细介绍的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2776532.html

(0)
上一篇 2025年3月8日 14:52:45
下一篇 2025年2月26日 00:15:18

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • ajax怎样实现修改功能(附代码)

    这次给大家带来ajax怎样实现修改功能(附代码),ajax实现修改功能的注意事项有哪些,下面就是实战案例,一起来看一下。 因为做的是一个内部管理系统,只用了一个主页面,所有的都不允许整个网页刷新,所以我们只能用ajax 来做,当然刚开始做也…

    2025年3月8日
    200
  • 怎么在页面状态保持ajax

    这次给大家带来怎么在页面状态保持ajax,在页面状态保持ajax的注意事项有哪些,下面就是实战案例,一起来看一下。 传统的页面,浏览器通过url访问页面,页面的内容由后台服务生成页面所有内容再发回给浏览器渲染展示。到AJAX流行的时候,很多…

    编程技术 2025年3月8日
    200
  • Ajax实现数据库修改和添加功能详细步骤

    这次给大家带来Ajax实现数据库修改和添加功能详细步骤,Ajax实现数据库修改和添加功能的注意事项有哪些,下面就是实战案例,一起来看一下。 修改和添加关于数据库的信息,可以用于任何的添加和修改这些数据库和前面的随笔数据库是一样的 一、显示出…

    2025年3月8日 编程技术
    200
  • 怎么使用fileinput来实现ajax异步上传

    这次给大家带来怎么使用fileinput来实现ajax异步上传,使用fileinput实现ajax异步上传的注意事项有哪些,下面就是实战案例,一起来看一下。 首先需要导入一些js和css文件 //中文包,不需要可以不用导入 登录后复制 ht…

    2025年3月8日
    200
  • 在项目中如何使用ajax请求

    这次给大家带来在项目中如何使用ajax请求,在项目中使用ajax请求的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 最近在做一个针对单个节点测速的功能页面,测速的逻辑是,测上传速度时,前端传5m数据给server,记录上传和返回数…

    编程技术 2025年3月8日
    200
  • 在Ajax里使用readyState与status区别有哪些

    这次给大家带来在Ajax里使用readyState与status区别有哪些,在Ajax里使用readyState与status的注意事项有哪些,下面就是实战案例,一起来看一下。 在前几篇分析了jquery的ajax异步和同步,以及异常的一些…

    2025年3月8日
    200
  • ajax分页查询图文详解

    这次给大家带来ajax分页查询图文详解,ajax分页查询的注意事项有哪些,下面就是实战案例,一起来看一下。 (1)先写个显示数据的页面,分页查询需要那几个部分呢? 1.首先是查询的文本框输入,还有查询按钮,那么就开始写代码吧 //输入查询字…

    2025年3月8日 编程技术
    200
  • 怎么用ajax实现数据删除与查看详情

    这次给大家带来怎么用ajax实现数据删除与查看详情,用ajax实现数据删除与查看详情的注意事项有哪些,下面就是实战案例,一起来看一下。 运用bootstrap,jquery和ajax显示一些数据,附加删除功能并且点击能弹出模态框详情功能 主…

    编程技术 2025年3月8日
    200
  • ajax实现分页和分页查询功能的步奏详解

    这次给大家带来ajax实现分页和分页查询功能的步奏详解,ajax实现分页和分页查询功能的注意事项有哪些,下面就是实战案例,一起来看一下。 首先为了页面的整齐与美观,我用到了bootstrap,需要引进所需要的文件包 登录后复制 下面是页面显…

    编程技术 2025年3月8日
    200
  • Ajax不刷新页面的情况下实现分页查询

    这次给大家带来Ajax不刷新页面的情况下实现分页查询,Ajax不刷新页面的情况下实现分页查询的注意事项有哪些,下面就是实战案例,一起来看一下。 要求: 获取数据库中大量的信息显示在页面上,必然要使用到分页查询; 若不使用Ajax,而是用其他…

    2025年3月8日
    200

发表回复

登录后才能评论