原生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 相关文章推荐
newxtree.js代码
Mar 13 Javascript
犀利的js 函数集合
Jun 11 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
Apr 08 Javascript
js重写alert控件(适合学习js的新手朋友)
Aug 24 Javascript
简述AngularJS的控制器的使用
Jun 16 Javascript
javascript自动切换焦点控制效果完整实例
Feb 02 Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
Sep 14 Javascript
浅析为什么a=&quot;abc&quot; 不等于 a=new String(&quot;abc&quot;)
Oct 25 Javascript
Vue二次封装axios为插件使用详解
May 21 Javascript
详解Vue源码学习之callHook钩子函数
Jul 25 Javascript
详解js删除数组中的指定元素
Oct 31 Javascript
element 动态合并表格的步骤
Dec 31 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数组合并的二种方法
2014/03/21 PHP
php版本的cron定时任务执行器使用实例
2014/08/19 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
2020/10/28 PHP
HTML中事件触发列表与解说
2007/07/09 Javascript
权威JavaScript 中的内存泄露模式
2007/08/13 Javascript
js类型检查实现代码
2010/10/29 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
JSF中confirm弹出框的用法示例介绍
2014/01/07 Javascript
file控件选择上传文件确定后触发的js事件是哪个
2014/03/17 Javascript
javascript初学者常用技巧
2014/09/02 Javascript
JQuery实现动态适时改变字体颜色的方法
2015/03/10 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
2015/04/06 Javascript
深入探究使JavaScript动画流畅的一些方法
2015/06/30 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
2016/05/24 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
关于Vue组件库开发详析
2018/07/01 Javascript
angularjs实现table表格td单元格单击变输入框/可编辑状态示例
2019/02/21 Javascript
vue+moment实现倒计时效果
2019/08/26 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
详解为什么Vue中的v-if和v-for不建议一起用
2021/01/13 Vue.js
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
Python super()方法原理详解
2020/03/31 Python
python 爬虫如何实现百度翻译
2020/11/16 Python
Python中全局变量和局部变量的理解与区别
2021/02/07 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
Html5之自定义属性(data-,dataset)
2019/11/19 HTML / CSS
公积金转移接收函
2014/01/11 职场文书
会计大学生职业生涯规划书范文
2014/01/13 职场文书
外贸英文求职信范文
2015/03/19 职场文书
小学开学典礼新闻稿
2015/07/17 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书
Redis可视化客户端小结
2021/06/10 Redis