原生JS实现ajax与ajax的跨域请求实例


Posted in Javascript onDecember 01, 2017

一、原生JS实现ajax

第一步获得XMLHttpRequest对象

第二步:设置状态监听函数

第三步:open一个连接,true是异步请求

第四部:send一个请求,可以发送一个对象和字符串,不需要传递数据发送null

第五步:在监听函数中,判断readyState=4&&status=200表示请求成功

第六步:使用responseText、responseXML接受响应数据,并使用原生JS操作DOM进行显示

var ajax = new XMLHttpRequest();
ajax.onreadystatechange = function(){
 console.log(ajax.readyState);
 console.log(ajax.status);
 if(ajax.readyState==4 && ajax.status==200){
  console.log(ajax.responseText);
  console.log(ajax.responseXML);//返回不是XML,显示null
  console.log(JSON.parse(ajax.responseText));
  console.log(eval("("+ajax.responseText+")"));
  }
}
ajax.open("GET","h51701.json",true);
ajax.send(null);

二、ajax的跨域请求

[跨域请求处理]由于在JS中存在同源策略。当请求不同协议名,不同端口号,不同主机名下面的文件时,将会违背同源策略,无法请求成功!需要进行跨域处理!

1、后台PHP进行设置:

前台无需任何设置,在后台被请求的PHP文件中,写入一条header。

header("Access-Control-Allow-Origin:*");//表示允许哪些域名请求这个PHP文件,*表示所有域名都允许

2、使用src属性+JSONP实现跨域

①拥有src属性的标签自带跨域功能!所以可以使用script标签的src属性请求后台数据

<scriptsrc="http://127.0.0.1/json.php"type="text/javascript"charset="utf-8"></script>

②由于src在加载数据成功后,后直接将加载内容放入到script标签中

所以,后台直接返回JSON字符串将不能在script标签中解析

因此,后台应该返回给前台一个回到函数名,并将JSON字符串作为参数传入

后台PHP文件中返回:

echo"callBack({$str})";

③前台接收到返回的回到函数,将直接在script标签中调用。因此需要声明这样一个回调函数,作为请求成功的回调。

function callBack(data){
  alert("请求成功");
  console.log(data);
 }

3、JQuery的ajax实现JSONP

① 在ajax请求时,设置dataType为"json"

② 后套返回时,依然需要返回回调函数。但是,ajax在发送请求时会默认使用get请求将回到函数名发给后台,后台可以使用$_GET['callback']取出回调函数名:

echo"{$_GET['callback']}({$str})";

③后台返回以后,ajax依然可以用success作为成功的回调函数:

success:function(data){}

当然后台也可以随便返回一个回调函数名。

echo"callBack({$str})";

前台只要请求成功,就会自动调用这个函数。类似于第2条的②③步

以上这篇原生JS实现ajax与ajax的跨域请求实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
[原创]来自ImageSee官方 JavaScript图片浏览器
Jan 16 Javascript
js控制div及网页相关属性的代码
Dec 19 Javascript
Javascript面向对象之四 继承
Feb 08 Javascript
js移除事件 js绑定事件实例应用
Nov 28 Javascript
基于jquery中children()与find()的区别介绍
Apr 26 Javascript
JavaScript简介
Feb 15 Javascript
jQuery插件实现控制网页元素动态居中显示
Mar 24 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
May 31 Javascript
浅析jQuery 3.0中的Data
Jun 14 Javascript
jQuery实现联动下拉列表查询框
Jan 04 Javascript
webuploader分片上传的实现代码(前后端分离)
Sep 10 Javascript
ES6小技巧之代替lodash
Jun 07 Javascript
浅谈angular4实际项目搭建总结
Dec 01 #Javascript
JS实现的ajax和同源策略(实例讲解)
Dec 01 #Javascript
微信小程序表单验证功能完整实例
Dec 01 #Javascript
PHP自动加载autoload和命名空间的应用小结
Dec 01 #Javascript
利用jquery如何从json中读取数据追加到html中
Dec 01 #jQuery
javascript修改浏览器title方法 JS动态修改浏览器标题
Nov 30 #Javascript
vue组件发布到npm简单步骤
Nov 30 #Javascript
You might like
修改了一个很不错的php验证码(支持中文)
2007/02/14 PHP
PHP中extract()函数的妙用分析
2012/07/11 PHP
Yii分页用法实例详解
2014/12/04 PHP
php数组生成html下拉列表的方法
2015/07/20 PHP
Js组件的一些写法
2010/09/10 Javascript
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
浅析基于WEB前端页面的页面内容搜索的实现思路
2014/06/10 Javascript
jQuery搜索子元素的方法
2015/02/10 Javascript
浅谈javascript中onbeforeunload与onunload事件
2015/12/10 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
2016/02/23 Javascript
bootstrap学习笔记之初识bootstrap
2016/06/21 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
react-native中ListView组件点击跳转的方法示例
2017/09/30 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
2018/05/29 Javascript
react 中父组件与子组件双向绑定问题
2019/05/20 Javascript
vue-router之解决addRoutes使用遇到的坑
2020/07/19 Javascript
[11:42]2018DOTA2国际邀请赛寻真——OG卷土重来
2018/08/17 DOTA
Python实现将绝对URL替换成相对URL的方法
2015/06/28 Python
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
2018/01/16 Python
对python_discover方法遍历所有执行的用例详解
2019/02/13 Python
详解Python locals()的陷阱
2019/03/26 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
Python分割训练集和测试集的方法示例
2019/09/19 Python
python单向循环链表原理与实现方法示例
2019/12/03 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
解决Python 写文件报错TypeError的问题
2020/10/23 Python
paramiko使用tail实时获取服务器的日志输出详解
2020/12/06 Python
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
JavaScript实现前端网页版倒计时
2021/03/24 Javascript
学生会个人总结范文
2015/02/15 职场文书
2015年艾滋病宣传活动总结
2015/03/27 职场文书
大学优秀学生主要事迹材料
2015/11/04 职场文书
干部外出学习心得体会
2016/01/18 职场文书
李白经典诗之一:全文无一“月”字,却句句有月
2019/07/12 职场文书