JS AJAX和JSONP的基础功能封装以及使用示例;

北慕城南 提交于 2019-12-06 04:55:46

1.代码:

 1 function ajax(options){
 2             options = options || {};  
 3             options.type = options.type || "get";
 4             data = options.data || {}; 
 5             // 处理数据
 6             var str = "";
 7             for(var i in data){
 8                 str += `${i}=${data[i]}&`;
 9             }
10             // 判断type类型拼接url
11             if(options.type == "get" || options.type == "jsonp"){
12                 var d = new Date();
13                 url = `${options.url}?${str}d=${d.getTime()}`;
14             }else{
15                 url = options.url;
16             }
17             // console.log(`拼接后的url是${url}`);
18             // 判断type类型走jsonp还是创建ajax
19             if(options.type == "jsonp" ){
20                 var script = document.createElement("script");
21                 script.src = url;
22                 document.body.appendChild(script);
23                 // console.log(`走了jsonp的方法,url是${url}`)
24                 window[data[data.colmName]] = function(responseText){
25                     options.success(responseText);
26                 }
27             }else{
28                 var xhr;
29                 //兼容性
30                 if(window.XMLHttpRequest){
31                     xhr = new XMLHttpRequest();
32                 }else if(window.ActiveObject){
33                     xhr = new ActiveXobject('Microsoft.XMLHTTP');
34                 }
35                 // 发送请求
36                 if(options.type == "get"){
37                     // console.log(`走了get的方法,url是${url}`)
38                     xhr.open("get",url,true);
39                     xhr.send(null)
40                 }else{
41                     // console.log(`走了post的方法,url是${options.url},参数是${str}`)
42                     xhr.open("post",url,true);
43                     xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
44                     xhr.send(str.slice(0,str.length-1));
45                 }
46                 // 接收数据
47                 xhr.onreadystatechange = function(){
48                     if(xhr.readyState == 4){
49                         var status = xhr.status;
50                         if(xhr.readyState == 4 && xhr.status == 200){
51                             options.success(xhr.responseText,xhr.status);
52                         }else{
53                             options.error(xhr.responseText,xhr.status)
54                         }
55                     }
56                 }
57             }
58         }

2.本地data.php中的数据:

<?php
    $u = $_REQUEST["user"];
    $p = $_REQUEST["pass"];
    echo "这是php数据".$u ."-----".$p;

3.使用示例:

  POST请求:

 1 ajax({
 2             url:"data.php",
 3             data:{
 4                 user:"admin",
 5                 pass:23213
 6             },
 7             type:"post",
 8             success:function(res,status){
 9                 console.log(res);
10                 console.log(status);
11             },
12             error:function(res,status){
13                 console.log(res);
14                 console.log(status);
15             }
16         })

  GET请求:

 1 //type不传默认是get
 2         ajax({
 3             url:"data.php",
 4             data:{
 5                 user:"admin",
 6                 pass:23213
 7             },
 8             success:function(res,status){
 9                 console.log(res);
10                 console.log(status);
11             },
12             error:function(res,status){
13                 console.log(res);
14                 console.log(status);
15             }
16         })

  JSONP:

 1 //以百度搜索接口为例
 2         ajax({
 3             url:"https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su",
 4             data:{
 5                 wd:"上海",
 6                 colmName:"cb",
 7                 cb:"adsaa"
 8             },
 9             success:function(res,status){
10                 console.log(res);
11                 console.log(status);
12             },
13             error:function(res,status){
14                 console.log(res);
15                 console.log(status);
16             }
17         })

 

  

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!