首頁 web前端 js教程 使用js如何呼叫json

使用js如何呼叫json

Jun 05, 2018 pm 03:22 PM
js json

這篇文章給大家詳細分析了js呼叫json方法的總結,對此有需要的朋友可以參考學習下。

Ajax基礎

ajax:無刷新資料讀取,讀取伺服器上的資訊

HTTP請求方法:

GET:用於取得資料,如瀏覽貼文

ajax.judgeXmlHttpRequest('get', 'index.php', function(data){
  alert(data);  //这是服务器返回的数据
})
登入後複製

POST:用於上傳資料,如使用者註冊

var dataJson = {
  name: 'ys',age: 123 
}
ajax.judgeXmlHttpRequest('post', 'index.php', function(data){
  alert(data);  //这是服务器返回的数据
},dataJson)
登入後複製

GET與POST的差異:

GET:透過網址傳遞(放入url中),會將傳遞的資料放到網址上面,名字=值&名字=值

get方式容量小,安全性低,有快取

POST:不透過網址傳遞

post容量較大,一般可達2G,安全性相對較高,沒有快取

原生Ajax的編寫

Ajax執行步驟

建立一個Ajax物件

非IE6瀏覽器:

var oAjax=new XMLHttpRequest();
登入後複製

IE6瀏覽器:

var oAjax=new ActiveXObject("Microsoft.XMLHTTP");
登入後複製

連接到伺服器

Ajax.open(方法,文件名,异步传输);
登入後複製

阻止快取方法:

Ajax.open('GET','a.txt?t='+new Date().getTime(),true);
登入後複製

同步:js中指事情必須一件一件來

非同步: js中指多件事情要一起做

ajax是做異步傳輸的,並不是同步

#發送請求

Ajax.send();
登入後複製

接收回傳值

請求狀態監控:onreadystatechange事件:當自己的Ajax與伺服器之間有通訊時觸發,主要透過readyState屬性來判斷結束沒有,結束了也並沒有代表成功,status屬性來判斷

#readyState屬性:請求狀態

0(未初始化)還沒有呼叫open方法

1(載入)已經呼叫send()方法,正在傳送請求

2 (載入完成)send()方法完成,已經收到全部對應內容

3(解析)正在解析收到的回應內容

4(完成)回應內容解析完成,可以在客戶端呼叫(完成不一定成功,需要status來偵測是成功還是失敗)

status屬性:

請求結果,是成功(200)還是失敗(404):Ajax .status==200

傳回值responseText:

從伺服器傳回的文字:Ajax.responseText(傳回的值是一個字串,有時需要進一步處理成其他格式的形式)

oAjax.onreadystatechange=function(){
  //oAjax.readyState: 表示浏览器和服务器之间进行到哪一步了
  if(oAjax.readyState==4){ //读取完成
    if(oAjax.status==200){ //读取的结果是成功
      alert('成功:'+oAjax.responseText);
    }
  }
}
登入後複製

將原生Ajax封裝成一個函數使用,最終編寫的原生Ajax為:

GET方法封裝的函數為:

function ajax(url,fnSuccess,fnFaild){
  //1.创建Ajax对象。js中,使用一个没有定义的变量会报错,使用一个没有定义的属性,是undefined。IE6下使用没有定义的XMLHttpRequest会报错,所以当做window的一个属性使用
  if (window.XMLHttpRequest) {
    var oAjax=new XMLHttpRequest();//非IE6
   }else{
    var oAjax=new ActiveXObject("Microsoft.XMLHTTP");//IE6
   }
  //2.连接到服务器
  oAjax.open('GET',url,true);
  //3.发送请求
  oAjax.send();
  //4.接收返回值
  oAjax.onreadystatechange=function(){
    //oAjax.readyState--浏览器和服务器之间进行到哪一步了
    if(oAjax.readyState==4){ //读取完成
      if(oAjax.status==200){ //读取的结果是成功
        fnSuccess(oAjax.responseText); //成功时执行的函数
      }else{
        if(fnFaild){  //判断是否传入失败是的函数,即用户是否关心失败时的结果
          fnFaild(oAjax.responseText); //对失败的原因做出处理
        }
      }
     }
   }
  }
登入後複製

POST方法封裝的函數為:

function ajaxPost(url,id,fnSuccess,fnFaild){
  //1.创建Ajax对象
  if (window.XMLHttpRequest) {
    var xhr=new XMLHttpRequest();//非IE6
  }else{
    var xhr=new ActiveXObject("Microsoft.XMLHTTP");//IE6
  }
  //2.连接到服务器
  xhr.open("POST",url,true);
  //设置头信息
  xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  var form=document.getElementById(id);
  //3.发送请求,传递数据
  xhr.send(serialize(form));
  xhr.onreadystatechange=function(){
    if(xhr.readyState==4){
      if ((xhr.status>=200 && xhr.status<300) || xhr.status==304) {
        fnSuccess(xhr.responseText);
      }else{
        fnFaild(xhr.responseText);
      }
    }
  };
}
登入後複製

字元集編碼:網頁和被要求的檔案的編碼要相同,如都是utf8

快取,阻止快取(經常改變的資料等,不能夠快取.主要用於GET方法),傳參時在路徑後面加? '可變的資料' 可以不影響原始資料

ajax(&#39;a.txt?t=&#39;+new Date().getTime(),function(str){
  alert(str);
},function(str){
  alert(str);
});
登入後複製

ajax請求動態資料:如json檔案

1 ajax傳回值是一個字串,可透過eval轉換後來讀取傳回的陣列/json資料

alert(str);
alert(typeof(str));
var arr=eval(str);
alert(typeof(arr));
alert(arr[1]);
alert(arr[1].c);
登入後複製

2 結合DOM建立元素,來顯示返回的內容

oBtn.onclick=function(){
  ajax(&#39;data/arr3.txt?t=&#39;+new Date().getTime(),function(str){
    var arr=eval(str);
    for (var i = 0; i < arr.length; i++) {
      var oLi=document.createElement(&#39;li&#39;);
      oLi.innerHTML=&#39;用户名:<span>&#39;+arr[i].user+&#39;</span>密码:<span>&#39;+arr[i].pass+&#39;</span>&#39;;
      oUl.appendChild(oLi);
    }
  },function(str){
    alert(str);
  });
}
登入後複製

資料型別-->傳回的資料型別可能是xml(幾乎已經淘汰),json(現在常用)   

下面來看個我最近剛寫原生js通過get方法呼叫json的例子:

if(!isNaN(matchId)) {
  var xmlHttp = null;
  try {// Chrome, Firefox, Opera, Safari
    xmlHttp = new XMLHttpRequest();
  }catch (e) {
    try {// Internet Explorer IE 6.0+
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {// Internet Explorer IE 5.5+
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        alert("your browser not support ajax!");
      }
    }
  }
  window.onload = function () {
    xmlHttp.open("get",/api/clientMatch/commonMatchDiagram.json?matchId=" + matchId,true);
    xmlHttp.send();
    xmlHttp.onreadystatechange = doResult; //设置回调函数
  };
  function doResult() {
    var html=&#39;&#39;;
    if ((xmlHttp.readyState == 4)&&(xmlHttp.status == 200)) {//4代表执行完成,200代表执行成功
      var data = JSON.parse(xmlHttp.responseText);
      if(data.code == 200){
      //代码执行
      }
      document.getElementById(&#39;appMatch&#39;).innerHTML = html;
    }
  }
}
登入後複製

上面是我整理給大家的,希望今後會對大家有幫助。

相關文章:

利用Angular如何實作變更偵測

#ES6中map、set與陣列、物件的比較(詳細教學)

使用Node.js如何實作靜態伺服器

以上是使用js如何呼叫json的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟 股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟 Dec 17, 2023 pm 06:55 PM

股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟

建議:優秀JS開源人臉偵測辨識項目 建議:優秀JS開源人臉偵測辨識項目 Apr 03, 2024 am 11:55 AM

建議:優秀JS開源人臉偵測辨識項目

MySQL5.7和MySQL8.0的差別是什麼? MySQL5.7和MySQL8.0的差別是什麼? Feb 19, 2024 am 11:21 AM

MySQL5.7和MySQL8.0的差別是什麼?

PHP 數組轉 JSON 的效能最佳化技巧 PHP 數組轉 JSON 的效能最佳化技巧 May 04, 2024 pm 06:15 PM

PHP 數組轉 JSON 的效能最佳化技巧

PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法 PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法 Dec 18, 2023 pm 03:39 PM

PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法

Pandas使用教學:讀取JSON檔案的快速入門 Pandas使用教學:讀取JSON檔案的快速入門 Jan 13, 2024 am 10:15 AM

Pandas使用教學:讀取JSON檔案的快速入門

Jackson庫中註解如何控制JSON序列化和反序列化? Jackson庫中註解如何控制JSON序列化和反序列化? May 06, 2024 pm 10:09 PM

Jackson庫中註解如何控制JSON序列化和反序列化?

深入了解PHP:JSON Unicode轉中文的實作方法 深入了解PHP:JSON Unicode轉中文的實作方法 Mar 05, 2024 pm 02:48 PM

深入了解PHP:JSON Unicode轉中文的實作方法

See all articles