原生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 相关文章推荐
离开页面时检测表单元素是否被修改,提示保存的js代码
Aug 25 Javascript
基于jquery的划词搜索实现(备忘)
Sep 14 Javascript
js动态控制table的tr、td增加及删除的具体实现
Apr 30 Javascript
node.js中的fs.rmdir方法使用说明
Dec 16 Javascript
js中this的用法实例分析
Jan 10 Javascript
JavaScript中的Math.sin()方法使用详解
Jun 15 Javascript
根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
Sep 14 Javascript
深入理解jQuery()方法的构建原理
Dec 05 Javascript
JS中offset和匀速动画详解
Feb 06 Javascript
vue双向绑定及观察者模式详解
Mar 19 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
Jun 06 Javascript
javascript实现移动端轮播图
Dec 09 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中call user func()函数及如何使用call user func调用自定义函数
2015/11/05 PHP
php 如何设置一个严格控制过期时间的session
2017/05/05 PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
2019/05/21 PHP
jquery multiSelect 多选下拉框
2010/07/09 Javascript
js 利用image对象实现图片的预加载提高访问速度
2013/03/29 Javascript
Javascript 实现的数独解题算法网页实例
2013/10/15 Javascript
javascritp添加url参数将参数加入到url中
2014/09/25 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
JavaScript创建对象_动力节点Java学院整理
2017/06/27 Javascript
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
为输入框加入数字js校验代码分享
2017/11/02 Javascript
Angular使用动态加载组件方法实现Dialog的示例
2018/05/11 Javascript
微信小程序实现点赞、取消点赞功能
2018/11/02 Javascript
IE8中jQuery.load()加载页面不显示的原因
2018/11/15 jQuery
微信小程序动画组件使用解析,类似vue,且更强大
2019/08/01 Javascript
vue在路由中验证token是否存在的简单实现
2019/11/11 Javascript
js实现鼠标拖拽div左右滑动
2020/01/15 Javascript
如何在JS文件中获取Vue组件
2020/09/16 Javascript
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
Python中bisect的用法
2014/09/23 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
2017/07/10 Python
python中requests库session对象的妙用详解
2017/10/30 Python
python opencv之SIFT算法示例
2018/02/24 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
Python中一些深不见底的“坑”
2019/06/12 Python
python使用Matplotlib改变坐标轴的默认位置
2019/10/18 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
新加坡网上花店:FlowerAdvisor新加坡
2018/10/05 全球购物
大学毕业的自我鉴定
2013/10/08 职场文书
工程招投标邀请书
2014/01/26 职场文书
会计员岗位职责
2014/03/15 职场文书
小学班干部竞选演讲稿
2014/04/24 职场文书
政府信息公开实施方案
2014/05/09 职场文书
大学新闻系自荐书
2014/05/31 职场文书