原生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 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(1)
Dec 23 Javascript
DOM相关内容速查手册
Feb 07 Javascript
Javascript 自适应高度的Tab选项卡
Apr 05 Javascript
jQuery.extend 函数的详细用法
Jun 27 Javascript
js对象转json数组的简单实现案例
Feb 28 Javascript
JS中如何实现点击a标签返回页面顶部的问题
Jan 19 Javascript
AngularJS路由实现页面跳转实例
Mar 03 Javascript
vuex进阶知识点巩固
May 20 Javascript
利用hasOwnProperty给数组去重的面试题分享
Nov 05 Javascript
详解50行代码,Node爬虫练手项目
Apr 22 Javascript
wx-charts 微信小程序图表插件的具体使用
Aug 18 Javascript
vue移动端弹起蒙层滑动禁止底部滑动操作
Jul 22 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
基于文本的访客签到簿
2006/10/09 PHP
php 之 没有mysql支持时的替代方案
2006/10/09 PHP
php读取二进制流(C语言结构体struct数据文件)的深入解析
2013/06/13 PHP
php中将一个对象保存到Session中的方法
2015/03/13 PHP
PHP内置函数生成随机数实例
2019/01/18 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
javascript 面向对象编程 function也是类
2009/09/17 Javascript
javascrpt绑定事件之匿名函数无法解除绑定问题
2012/12/06 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
js匿名函数的调用示例(形式多种多样)
2014/08/20 Javascript
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
关于在Servelet中如何获取当前时间的操作方法
2016/06/28 Javascript
JavaScript面试题(指针、帽子和女朋友)
2016/11/23 Javascript
Vue键盘事件用法总结
2017/04/18 Javascript
vue中使用ueditor富文本编辑器
2018/02/08 Javascript
如何在项目中使用log4.js的方法步骤
2019/07/16 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
2019/09/17 Javascript
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
js实现简单扫雷
2020/11/27 Javascript
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python 文件与目录操作
2008/12/24 Python
Python通过正则表达式选取callback的方法
2015/07/18 Python
Python基础中所出现的异常报错总结
2016/11/19 Python
Python实现简单http服务器
2018/04/12 Python
学python爬虫能做什么
2020/07/29 Python
python 线程的五个状态
2020/09/22 Python
详解Django中的FBV和CBV对比分析
2021/03/01 Python
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
俄罗斯奢侈品牌衣服、鞋子和配饰的在线商店:INTERMODA
2020/07/17 全球购物
CLR与IL分别是什么含义
2016/08/23 面试题
linux面试题参考答案(4)
2014/09/21 面试题
淘宝客服自我总结鉴定
2014/01/25 职场文书
中学生民族团结演讲稿
2014/08/27 职场文书
个人查摆剖析材料
2014/10/16 职场文书
python中使用 unittest.TestCase单元测试的用例详解
2021/08/30 Python