JS AJAX和JSONP的基础功能封装以及使用示例;
1.代码:
- function ajax(options){
- options = options || {};
- options.type = options.type || "get";
- data = options.data || {};
- // 处理数据
- var str = "";
- for(var i in data){
- //str += `${i}=${data[i]}&`; //IE不兼容模板字符串 ----update by 12-02
str = str + i + "=" + data[i] + "&"; }- // 判断type类型拼接url
- if(options.type == "get" || options.type == "jsonp"){
- var d = new Date();
- //url = `${options.url}?${str}d=${d.getTime()}`; //IE不兼容模板字符串 ----update by 12-02
- url = options.url + "?" + str + "_jwy" + "=" + d.getTime(); }else{
- url = options.url;
- }
- // console.log(`拼接后的url是${url}`);
- // 判断type类型走jsonp还是创建ajax
- if(options.type == "jsonp" ){
- var script = document.createElement("script");
- script.src = url;
- document.body.appendChild(script);
- // console.log(`走了jsonp的方法,url是${url}`)
- window[data[data.colmName]] = function(responseText){
- options.success(responseText);
- }
- }else{
- var xhr;
- //兼容性
- if(window.XMLHttpRequest){
- xhr = new XMLHttpRequest();
- }else if(window.ActiveObject){
- xhr = new ActiveXobject('Microsoft.XMLHTTP');
- }
- // 发送请求
- if(options.type == "get"){
- // console.log(`走了get的方法,url是${url}`)
- xhr.open("get",url,true);
- xhr.send(null)
- }else{
- // console.log(`走了post的方法,url是${options.url},参数是${str}`)
- xhr.open("post",url,true);
- xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
- xhr.send(str.slice(0,str.length-1));
- }
- // 接收数据
- xhr.onreadystatechange = function(){
- if(xhr.readyState == 4){
- var status = xhr.status;
- if(xhr.readyState == 4 && xhr.status == 200){
- options.success(xhr.responseText,xhr.status);
- }else{
- options.error(xhr.responseText,xhr.status)
- }
- }
- }
- }
- }
2.本地data.php中的数据:
- <?php
- $u = $_REQUEST["user"];
- $p = $_REQUEST["pass"];
- echo "这是php数据".$u ."-----".$p;
3.使用示例:
POST请求:
- ajax({
- url:"data.php",
- data:{
- user:"admin",
- pass:23213
- },
- type:"post",
- success:function(res,status){
- console.log(res);
- console.log(status);
- },
- error:function(res,status){
- console.log(res);
- console.log(status);
- }
- })
GET请求:
- //type不传默认是get
- ajax({
- url:"data.php",
- data:{
- user:"admin",
- pass:23213
- },
- success:function(res,status){
- console.log(res);
- console.log(status);
- },
- error:function(res,status){
- console.log(res);
- console.log(status);
- }
- })
JSONP:
- //以百度搜索接口为例
- ajax({
- url:"https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su",
- data:{
- wd:"上海",
- colmName:"cb",
- cb:"adsaa"
- },
- success:function(res,status){
- console.log(res);
- console.log(status);
- },
- error:function(res,status){
- console.log(res);
- console.log(status);
- }
- })
JS AJAX和JSONP的基础功能封装以及使用示例;的更多相关文章
- 从 AJAX 到 JSONP的基础学习
目录索引: 一.AJAX的概念二.POST && GET三.原生实现AJAX简单示例 3.1 实现代码 3.2 重点说明四.框架隐藏域 4.1 基本概念 4.2 后台写入脚本 4.3 ...
- 原生javascript封装ajax和jsonp
在我们请求数据时,完成页面跨域,利用原生JS封装的ajax和jsonp: <!DOCTYPE html> <html lang="en"> <head ...
- 用原生JS实现AJAX和JSONP
前端开发在需要与后端进行数据交互时,为了方便快捷,都会选择JQuery中封装的AJAX方法,但是有些时候,我们只需要JQuery的AJAX请求方法,而其他的功能用到的很少,这显然是没必要的.其实,原生 ...
- ajax和jsonp的封装
一直在用jQuery的ajax,跨域也是一直用的jQuery的jsonp,jQuery确实很方便,$.ajax({...})就可以搞定. 为了更好的理解ajax和jsonp,又重新看了下书,看了一些博 ...
- vue.js的ajax和jsonp请求
首先要声明使用ajax 在 router下边的 Index.js中 import VueResource from 'vue-resource'; Vue.use(VueResource); ajax ...
- js实现第一次打开网页弹出指定窗口(常用功能封装很好用)
js实现第一次打开网页弹出指定窗口(常用功能封装很好用) 一.总结 1.常用功能封装:之前封装的cookie的操作函数非常好用,我自己也可以这么搞 二.js实现第一次打开网页弹出指定窗口 练习1:第一 ...
- 前端基础功能,原生js实现轮播图实例教程
轮播图是前端最基本.最常见的功能,不论web端还是移动端,大平台还是小网站,大多在首页都会放一个轮播图效果.本教程讲解怎么实现一个简单的轮播图效果.学习本教程之前,读者需要具备html和css技能,同 ...
- JavaScript学习总结【12】、JS AJAX应用
1.AJAX 简介 AJAX(音译为:阿贾克斯) = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技 ...
- 06: AJAX全套 & jsonp跨域AJAX
目录: 1.1 AJAX介绍 1.2 jQuery AJAX(第一种) 1.3 原生ajax(第二种) 1.4 iframe“伪”AJAX(第三种) 1.5 jsonp跨域请求 1.6 在tornad ...
随机推荐
- python基础 — time库
时间获取-------time() ctime() gmtime() 时间格式化-------strftime() strptime() 程序计时-------sleep() perf_count ...
- mysql实践一:SQL基础
mysql简介 mysql是有名的开放源代码关系型数据库.它最早是AB公司开源的,后来到Sun公司手中.之后Sun公司被Oracle公司收购,mysql就归Oracle所有.从此mysql走向商业化, ...
- 精确选择识别png图片有像素的区域
/** * * *---------------------------------------* * | ***精确选择识别png图片有像素的区域*** | * *----------------- ...
- Gym 102055B Balance of the Force
大意: $n$个骑士, 第$i$个骑士若加入光明阵营, 那么能力值$L_i$, 加入黑暗阵营, 能力值$D_i$. 给定$m$个限制$(u_i,v_i)$, 表示$u_i,v_i$不能在同一阵营. 求 ...
- The three day 给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本
""" 给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本. 所谓无效化 IP 地址,其实就是用 "[.]" 代替了每个 ...
- 全栈项目|小书架|微信小程序-项目结构设计分包
前面的文章 介绍了服务端的基础搭建以及用户模块的设计,接下来就是在服务端和客户端实现具体的业务了. 本篇文章先来介绍微信小程序开发的项目结构设计,也就是项目分包情况. 由于项目是在<极客时间-9 ...
- python 直角图标生成圆角图标
参考链接:https://stackoverflow.com/questions/11287402/how-to-round-corner-a-logo-without-white-backgroun ...
- ES6之promise原理
我在这里介绍了promise的原理: https://juejin.im/post/5cc54877f265da03b8585902 我在这里 仅仅张贴 我自己实现的简易promise——DiProm ...
- Android Jetpack组件
带你领略Android Jetpack组件的魅力 Android新框架jetpack的内容讲解:Room.WorkManager.LifeCycles.LiveData.ViewModel.DataB ...
- 用户在浏览器输入URL回车之后,浏览器都做了什么
在直接列出执行的步骤之前先来普及几个知识,相信了解完这些知识之后会对前后端的交互有更深入的理解. 1.TCP连接 TCP:Transmission Control Protocol, 传输控制协议,是 ...