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的基础功能封装以及使用示例;的更多相关文章

  1. 从 AJAX 到 JSONP的基础学习

    目录索引: 一.AJAX的概念二.POST && GET三.原生实现AJAX简单示例 3.1 实现代码 3.2 重点说明四.框架隐藏域 4.1 基本概念 4.2 后台写入脚本 4.3 ...

  2. 原生javascript封装ajax和jsonp

    在我们请求数据时,完成页面跨域,利用原生JS封装的ajax和jsonp: <!DOCTYPE html> <html lang="en"> <head ...

  3. 用原生JS实现AJAX和JSONP

    前端开发在需要与后端进行数据交互时,为了方便快捷,都会选择JQuery中封装的AJAX方法,但是有些时候,我们只需要JQuery的AJAX请求方法,而其他的功能用到的很少,这显然是没必要的.其实,原生 ...

  4. ajax和jsonp的封装

    一直在用jQuery的ajax,跨域也是一直用的jQuery的jsonp,jQuery确实很方便,$.ajax({...})就可以搞定. 为了更好的理解ajax和jsonp,又重新看了下书,看了一些博 ...

  5. vue.js的ajax和jsonp请求

    首先要声明使用ajax 在 router下边的 Index.js中 import VueResource from 'vue-resource'; Vue.use(VueResource); ajax ...

  6. js实现第一次打开网页弹出指定窗口(常用功能封装很好用)

    js实现第一次打开网页弹出指定窗口(常用功能封装很好用) 一.总结 1.常用功能封装:之前封装的cookie的操作函数非常好用,我自己也可以这么搞 二.js实现第一次打开网页弹出指定窗口 练习1:第一 ...

  7. 前端基础功能,原生js实现轮播图实例教程

    轮播图是前端最基本.最常见的功能,不论web端还是移动端,大平台还是小网站,大多在首页都会放一个轮播图效果.本教程讲解怎么实现一个简单的轮播图效果.学习本教程之前,读者需要具备html和css技能,同 ...

  8. JavaScript学习总结【12】、JS AJAX应用

    1.AJAX 简介 AJAX(音译为:阿贾克斯) = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技 ...

  9. 06: AJAX全套 & jsonp跨域AJAX

    目录: 1.1 AJAX介绍 1.2 jQuery AJAX(第一种) 1.3 原生ajax(第二种) 1.4 iframe“伪”AJAX(第三种) 1.5 jsonp跨域请求 1.6 在tornad ...

随机推荐

  1. (四)linux 学习 --使用命令

    The Linux Command Line 读书笔记 - 部分内容来自 http://billie66.github.io/TLCL/book/chap06.html 文章目录 什么是命令 是哪一种 ...

  2. pymysql 模块简单使用

    目录 pymysql 模块简单使用 安装 pymysql 模块 使用 pymysql 连接数据库 并插入数据 使用pymysql 插入数据 修改查询显示结果 pymysql 模块简单使用 安装 pym ...

  3. web渗透思维导图

    更新中!!

  4. VS使用日常

    一.快捷键 1.Ctrl R+E    选中变量快捷自动生成属性

  5. Java中 单例模式(singleton)

    Java Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在. 使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收( ...

  6. C# 数组排序带索引

    想到了两种方法来实现,分别利用了List.Sort()和Dictionary.OrderBy()方法,代码如下: , , , , , , , , , }; //List.Sort() List< ...

  7. ChipGenius 识别U盘主控信息

    ChipGenius 识别U盘主控信息 ================== End

  8. Linux ass2srt

    Linux ass2srt bash script #! /usr/bin/env bash ] then echo "USAGE: $0 <directory> <fro ...

  9. iOS - WWDC18 iOS 自动生成强密码和自动填充验证码/密码

    本文将介绍WWDC18 Automatic Strong Passwords and Security Code Autofill和WWDC17 Introducing Password AutoFi ...

  10. Jenkins的语法之pipeline

    如果不处理,pipeline:stages中任一stage失败,都会致使其以下stage都失败,那么处理方式为: 1.stage在可能出错的地方添加try catch语句 如:try{} catch( ...