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技巧 — pip install 错误,超时
jieba库安装失败 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jieba wordcloud库安装失败 pip instal ...
- A Simple Question of Chemistry
#include<stdio.h> int main() { int i, l; ]; ]; l = ; ) { l++; } ; a[i]!= && i<l; i+ ...
- Shiro集成SSM基于动态URL权限管理(二)
这个案例基于上一个demo扩展而来.所以数据库表,在Shiro集成SSM基于URL权限管理(一)开篇的一致.如果上个demo操作的建议重新导入一次,避免出现问题. 而这次都不是通过固定写在方法上的注解 ...
- iOS核心动画(专用图层篇)
之前的文章我们了解了Core Animation中图层的一些基础知识.没有看过的传送门在此: iOS核心动画基础篇 那么在了解了这些基础知识之后,接下来进入专用图层的了解 苹果为了方便和性能,封装了几 ...
- AS3数字取整
AS3 数字取整方法int()去掉小数点trace(int(3.14)); //输出3trace(int(-3.14)); //输出-3Math.round()方法:Math.round()可以四舍五 ...
- Pycharm配置文档教程
1 桌面找到快捷方式 双击打开 2 3 4 需要自行注册 5 看自己喜欢选择 喜欢白色 选择左边 喜欢黑色 选择右边 6 7 可选 如果你对 Markdown 感兴趣:或者会用 就点击 install ...
- Eclipse开发环境(二):配置
二.高级设置 1. 工作空间 在打开软件时,会提示用户选择工作空间,之后在Eclipse中创建的项目都会保存在这个工作空间(目录)下面. 在此把工作空间定为D:\workspaces\eclipse- ...
- Python与Golang协程异同
背景知识 这里先给出一些常用的知识点简要说明,以便理解后面的文章内容. 进程的定义: 进程,是计算机中已运行程序的实体.程序本身只是指令.数据及其组织形式的描述,进程才是程序的真正运行实例. 线程的定 ...
- 浅谈dubbo服务
Dubbo分布式服 推荐大家一个画图工具:https://www.processon.com/i/572d51efe4b0c3c74981ec14 1.Dubbo是一个分布式服务框架,致力于提供高性能 ...
- grpc的简单用例 (golang实现)
这个用例的逻辑很简单, 服务器运行一个管理个人信息的服务, 提供如下的四个服务: (1) 添加一个个人信息 注: 对应于Unary RPCs, 客户端发送单一消息给服务器, 服务器返回单一消息 (2) ...