vue-ajax 작은 패키지 인 스 턴 스

4818 단어 vue포장 하 다ajax
1.js 파일:

/*
* ajax  :
* 1.     
* 2. new Vue().ajax.get(url,data,fn,ojson),   new Vue().ajax.post(url,data,fn,ojson)
* url:             (string)
* data:         (   ) (obj)
* fn:           ,        data (function)
* ojson:        json   (   ) (    "json")
*
* 3. new Vue().ajax.get().cancel():       
* 4. new Vue().ajax.json(str):    json     
**/
Vue.prototype.ajax={
 //  url    
 addUrl: function (url,obj){
  //    url,  post  , obj url, url null
  if(arguments.length==1){
   obj=url;
   url=null;
  }
  //url   (get  :   url  )
  if(!!url){
   for(var k in obj){
    url += (url.indexOf("?")==-1 ? "?" : "&");
    url+=encodeURIComponent(k)+ "=" +encodeURIComponent(obj[k]);
   }
  }else{
   //post  (  data  )
   url="";
   for(var k in obj){
    url+=encodeURIComponent(k)+ "=" +encodeURIComponent(obj[k]);
    url+="&";
   }
   //      &
   var arr=url.split("");
   arr.pop();
   url=arr.join("");
  }
  //        
  return url;
 },
 get: function (url,data,fn,ojson){
  this.xhr=new XMLHttpRequest();
  //  data ,      
  if(typeof data =="function"){
   ojson=fn;
   fn=data;
   data={};
  }
  //  url data  
  url=this.addUrl(url,data)
  //      
  this.xhr.open("get",url,true);
  this.xhr.send(null);
  //                 
  this.success(fn,ojson);
  //    
  return this;
 },
 post: function (url,data,fn,ojson){
  this.xhr=new XMLHttpRequest();
  //  data ,      
  if(typeof data =="function"){
   ojson=fn;
   fn=data;
   data={};
  }
  //  data  
  data=this.addUrl(data);
  //      
  this.xhr.open("post",url,true);
  this.xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  this.xhr.send(data);

  //                 
  this.success(fn,ojson);
  //    
  return this;
 },
 //     json
 json: function (str){
  return (new Function("return " + str))(); 
 },
 success: function (fn,ojson){
  //                 
  var self=this;
  this.xhr.onreadystatechange=function (){
   var odata;
   if(self.xhr.readyState == 4){
    if((self.xhr.status>=200 && self.xhr.status<300) || self.xhr.status == 304){
     odata=self.xhr.responseText;
     //  json   json  
     if(ojson==="json"){
      odata=self.json(odata);
     }
     fn(odata);
    }else{
     odata="request was unsuccessful: "+self.xhr.status;
     fn(odata);
    }
   }
  }
 },
 //      
 cancel: function (){
  this.xhr.abort();
  return this;
 }
}
2.html 예제:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
<body>
 <div id="app">
  <button @click="getInfo">      </button>
  <span>{{ msg }}</span>
 </div>

 <script src="vue.js"></script>
 <script src="vue-ajax.js"></script>
 <script>
  var vm=new Vue({
   el: "#app",
   data: {
    msg: "",
   },
   methods: {
    getInfo: function (){
     var self=this;
     this.ajax.get("1.json",{
      tel: 123456,
      address: "   "
     },function (data){
      self.msg=data[1].name
     },"json");
    }
   }
  })
 </script>
</body>
</html>
3.가 져 올 데이터(1.json)

[
 {
  "name": "  ",
  "age": 18,
  "sex": "man"
 },
 {
  "name": "  ",
  "age": 20,
  "sex": "woman"
 },
 {
  "name": "  ",
  "age": 22,
  "sex": "man"
 }
]
4.결과

이상 의 vue-ajax 작은 패키지 인 스 턴 스 는 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 가 되 고 여러분 들 이 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기