ホームページ ウェブフロントエンド jsチュートリアル $.ajax() メソッドはどのようにしてサーバーから json データを取得しますか?

$.ajax() メソッドはどのようにしてサーバーから json データを取得しますか?

Apr 13, 2018 am 09:38 AM
javascript サーバ

今回は、$.ajax() メソッドを使用してサーバーから json データを取得する方法を説明します。次に実際のケースを見てみましょう。

1つ。 jsonとは何ですか

json は、xml に代わるデータ構造であり、xml に比べて小さいですが、強力な記述機能を備えており、トラフィックが少なく、ネットワーク上でのデータ送信が高速です。

json は、次の記号でマークされた文字列です。

{キーと値のペア}: json オブジェクト

[{},{},{}]: json 配列

"": 二重引用符は属性または値です

: : コロンの前にはキーがあり、その後に値が続きます (この値は、基本

データ型

の値、または配列またはオブジェクトにすることができます)、つまり、{"age": 18} これは、18 歳と [{"age": 18},{"age": を含む json オブジェクトとして理解できます。 20}] は、2 つのオブジェクトを含む json 配列を表します。 {"age":[18,20]} を使用して、年齢配列を持つオブジェクトである上記の json 配列を簡素化することもできます。

2. $.ajax() メソッドの dataType 属性の値 $.ajax() メソッドの dataType 属性は、サーバーによって返されることが予期されるデータ型である String 型パラメーターである必要があります。指定しない場合、JQuery は、http パッケージの MIME 情報に基づいて、responseXML または responseText [パート 3 で説明] を自動的に返し、それをコールバック

関数パラメータ

として渡します。利用可能なタイプは次のとおりです: xml: JQuery で処理できる XML ドキュメントを返します。

html: プレーン テキストの HTML 情報を返します。含まれているスクリプト タグは、DOM に挿入されたときに実行されます。

script: プレーンテキストの

JavaScript

コードを返します。結果は自動的にキャッシュされません。キャッシュパラメータが設定されていない限り。 (同じドメインの下ではなく) リモート リクエストを行う場合、すべての post リクエスト が get リクエストに変換されることに注意してください。 json: JSON データを返します。

jsonp: JSONP形式。 myurl?callback=? などの SONP フォームを使用して関数を呼び出すと、JQuery は最後の「?」を正しい関数名に自動的に置き換えて、

コールバック関数

を実行します。

三. MIME データ型と応答 setContentType() メソッド MIME タイプとは何ですか? 出力結果をブラウザに送信する場合、ブラウザは出力ドキュメントを処理するために適切なアプリケーションを起動する必要があります。これは、さまざまなタイプの MIME (MultiPurpose Internet Mail Extensions) を通じて実現できます。 HTTP では、MIME タイプは Content-Type ヘッダーで定義されます。

たとえば、Microsoft の Excel ファイルをクライアントに送信します。するとこの時のMIMEタイプは「application/vnd.ms-excel」になります。実際のほとんどの場合、このファイルは次の場所に転送されます。 処理する Execl (特殊な MIME タイプのアプリケーションを処理するように Execl を設定すると仮定します)。 Java では、MIME タイプを設定するには、Response オブジェクトの ContentType プロパティを使用します。たとえば、一般的に使用されるのは、response.setContentType("text/html;charset=UTF-8") です。

初期の HTTP プロトコルでは、追加のデータ タイプ情報はなく、クライアント プログラムはマルチメディア データ タイプをサポートするために、データ データの前に MIME を付加していました。データの種類を識別するための型情報。

各 MIME タイプは 2 つの部分で構成されます。最初の部分はテキスト、画像などのデータの一般的なカテゴリであり、2 番目の部分は特定のタイプを定義します。

一般的な MIME タイプ:

ハイパーテキスト マークアップ言語 text .html,.html text/html

プレーンテキスト .txt text/plain

RTF テキスト .rtf application/rtf

GIF グラフィックス .gif image/gif

JPEG グラフィックス .ipeg,.jpg image/jpeg

auサウンドファイル.au audio/basic

MIDI音楽ファイルmid,.midi audio/midi,audio/x-midi

RealAudio 音楽ファイル .ra、.ram audio/x-pn-realaudio

MPEG ファイル .mpg、.mpeg video/mpeg

AVI ファイル .avi video/x-msvideo

GZIP ファイル .gz application/x-gzip

TAR ファイル .tar application/x-tar

クライアント プログラムがサーバーからデータを受信する場合、サーバーからのデータ ストリームを受け入れるだけでドキュメントの名前は認識されないため、サーバーは追加情報を使用してクライアント プログラムにデータの MIME タイプを伝える必要があります。

サーバーは実際のデータを送信する前に、まずデータをマークする MIME タイプ情報を送信する必要があります。この情報は Content-type キーワードを使用して定義されます。たとえば、HTML ドキュメントの場合、サーバーは最初に次の 2 行を送信します。 MIME 識別情報。この識別情報は実際にはデータ ファイルの一部ではありません。

コンテンツタイプ: text/html

2 行目は空白行であることに注意してください。この空白行を使用する目的は、MIME 情報を実際のデータの内容から分離することです。

前述したように、Java では、Response オブジェクトの ContentType 属性を使用して MIME タイプを設定します。この設定方法は、response.setContentType(MIME) ステートメントを使用することです。クライアントブラウザを作成し、さまざまなタイプのデータを区別し、さまざまなMIMEに従ってブラウザ内のさまざまなプログラム埋め込みモジュールを呼び出して、対応するデータを処理します。

参照用に、Tomcat のインストール ディレクトリである confweb.xml に多数の MIME タイプが定義されています。たとえば、次のように設定できます:

response.setContentType("text/html; charset=utf-8"); response.setContentType("text/plain; charset=utf-8"); application/json jsonデータ

このメソッドは、応答が送信される前に、クライアントに送信される応答のコンテンツ タイプを設定します。指定されたコンテンツ タイプには、text/html;charset=UTF-8 などの文字エンコード仕様を含めることができます。 getWriter() メソッドが呼び出される前にこのメソッドが呼び出された場合、応答の文字エンコーディングは指定されたコンテンツ タイプからのみ設定されます。 getWriter() メソッドの呼び出し後、または送信後にこのメソッドが呼び出された場合、http プロトコルを使用する場合、このメソッドは応答の文字エンコーディングを設定しません。 コンテンツタイプのエンティティヘッダー。

4つ。 $.ajax() メソッドを使用して JSON データを取得する 3 つの方法

dataType パラメータの設定によって、サーバーから返されたデータを jquery がどのように自動的に解析できるかが決まります。バックグラウンドから返された json 文字列を取得して json オブジェクトに解析するには、いくつかの方法があります。以下に、Java の例を示します。以下の3つの方法の結果

1. dataType が $.ajax() パラメーターに設定されておらず、戻り値の型がバックグラウンド応答に設定されていない場合、デフォルトで通常のテキストとして処理されます [response.setContentType("text/html;charset= utf-8"); もテキストとして処理されます ], js では、eval() や $.parseJSON() などのメソッドを手動で使用して、返された文字列を json オブジェクトに変換して使用する必要があります。

リーリー

2. $.ajax() パラメータで dataType="json" を設定すると、jquery は返された文字列を json オブジェクトに自動的に変換します。背景は次のように設定できます: [推奨] response.setContentType("text/html;charset=utf-8"); または response.setContentType("application/json;charset=utf-8");

//Java代码:后台获取单个数控定位器的历史表格的数据
	public void getHistorySingleData() throws IOException{
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setHeader("Content-type", "text/html;charset=UTF-8");
		response.setContentType("text/html;charset=utf-8");
		String deviceName = request.getParameter("deviceName");
		String startDate= request.getParameter("startDate");
		String endDate = request.getParameter("endDate");
		SingleHistoryData[] singleHistoryData = chartService.getHistorySingleData(deviceName,startDate, endDate);
		System.out.println(singleHistoryData.length);
		System.out.println(JSONArray.fromObject(singleHistoryData).toString());//打印:[{"time":"2016-11-11 10:00:00","state":"运行","ball":"锁紧",....},{"time":"2016-11-11 10:00:05","state":"运行","ball":"锁紧",....},{},{}....]查到几条singleHistoryData对象就打印几个对象的信息{"time":"2016-11-11 10:00:05","state":"运行","ball":"锁紧",....}
		response.getWriter().print(JSONArray.fromObject(singleHistoryData).toString());
	}
ログイン後にコピー
	/*js代码:选择查询某一时间段的数据,点击查询之后进行显示*/
 $("#search").click(function () {
 	var data1 = [];
 	var n;
 	var deviceName=$("body").attr("id"); 
  var startDate = $("#startDate").val();
  var endDate = $("#endDate").val();
  $.ajax({
   url:"/avvii/chart/getHistorySingleData",
   type:"post",
   data:{
    "deviceName":deviceName,
    "startDate": startDate,
    "endDate": endDate
   },
   success: function (data) {
  	 alert(data);//---->弹出[{"time":"2016-11-11 10:00:00","state":"运行","ball":"锁紧",....},{"time":"2016-11-11 10:00:05","state":"运行","ball":"锁紧",....},{},{}....],后台传过来几条singleHistoryData对象就打印几个对象的信息{"time":"2016-11-11 10:00:05","state":"运行","ball":"锁紧",....}
 		 alert(Object.prototype.toString.call(data)); //--->弹出[object String],说明获取的是String类型的数据
  	 var JsonObjs = eval("(" + data + ")");  //或者:var JsonObjs = $.parseJSON(data);
 		 alert(JsonObjs);//alert(JsonObjs);---->弹出[object Object],[object Object],[object Object][object Object],[object Object],[object Object]……后台传过来几条singleHistoryData对象就打印几个[object Object]
    n=JsonObjs.length;
    if(n==0){
   	 alert("您选择的时间段无数据,请重新查询");
    }
 		 for(var i = 0; i < JsonObjs.length; i++){	      
		  	  var name = JsonObjs[i]['time'];//针对每一条数据:JsonObjs[i],或者:JsonObjs[i].time
		 	  var state = JsonObjs[i]['state'];
		 	  var ball = JsonObjs[i]['ball'];
		 	  var xd = JsonObjs[i]['xd'];
		 	  var yd = JsonObjs[i]['yd'];
		 	  var zd = JsonObjs[i]['zd'];
		 	  var xf = JsonObjs[i]['xf'];
		 	  var yf = JsonObjs[i]['yf'];
		 	  var zf = JsonObjs[i]['zf'];
      data1[i] = {name:name,state:state,ball:ball,xd:xd,yd:yd,zd:zd,xf:xf,yf:yf,zf:zf};//个数与下面表头对应起来就可以了,至于叫什么名字并不影响控件的使用
    }
 		 if(JsonObjs.length != 10){
 			 for(var j=0;j<(10-((JsonObjs.length)%10));j++){    //补全最后一页的空白行,使表格的长度保持不变
 				 data1[j+JsonObjs.length] = {name:" ",state:"",ball:"",xd:"",yd:"",zd:"",xf:"",yf:"",zf:""}; 
 			 }
 		 }
    var userOptions = {
      "id":"kingTable",        				//必须 表格id
      "head":["时间","运行状态","球头状态","X向位置/mm","Y向位置/mm","Z向位置/mm","X向承载力/Kg","Y向承载力/Kg","Z向承载力/Kg"], //必须 thead表头
      "body":data1,         				//必须 tbody 后台返回的数据展示
      "foot":true,         					// true/false 是否显示tfoot --- 默认false
      "displayNum": 10,        					//必须 默认 10 每页显示行数
      "groupDataNum":6,        					//可选 默认 10 组数
      sort:false,         					// 点击表头是否排序 true/false --- 默认false
      search:false,         					// 默认为false 没有搜索
      lang:{
       gopageButtonSearchText:"搜索"
      }
    }
    var cs = new KingTable(null,userOptions);
   }
  }); 
 });
ログイン後にコピー

3. ajaxメソッドのパラメータにDataTypeが指定されておらず、戻り値の型がバックグラウンドで「application/json」に設定されています。このように、jquery は MIME タイプに基づいてインテリジェントに判断し、それを自動的に解析して json オブジェクトに変換します。

リーリー

注: フロントエンドまたはバックエンドで json オブジェクトを返す設定がある限り、eval() メソッドまたは $.parseJSON() メソッドを使用して解析する必要はありません。そうしないと、再度解析するときにエラーが発生します。

要約: 上記の方法のうち、便利でエラーが発生しにくい 2 番目の方法を使用することをお勧めします。

5つ。 eval() メソッド

var json object=eval('('+json data+')'); 中括弧で囲まれた内容が eval() によって返され、JSON オブジェクトが返されます。 eval 関数の仕組み: eval 関数は、JavaScript コードを含む指定された文字列を評価し、その文字列に含まれる式または一連の正当な JavaScript ステートメントの実行を試みます。 eval 関数は、最後の式またはステートメントに含まれる値または参照を返します。

なぜ eval に "("("+data+")");// を追加する必要があるのでしょうか?

理由は: 評価自体です。 jsonは「{}」で始まり最後が「{}」で終わるため、JSではステートメントブロックとして処理されるため、強制的に式に変換する必要があります。かっこを追加する目的は、JavaScript コードを処理するときに、ステートメントとして実行するのではなく、かっこ内の式を eval 関数に強制的にオブジェクトに変換させることです。たとえば、オブジェクト リテラル {} を考えます。外側の大括弧が追加されていない場合、eval はその中括弧を JavaScript コード ブロックの開始マークと終了マークとして認識し、{} は空のステートメントを実行するとみなします。

この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:

getBoundingClientRectの使用法と互換性処理

vueはショッピングカートの小さなボール放物線効果を実装します Vue.jsでのコンポーネントの使用の詳細な説明

以上が$.ajax() メソッドはどのようにしてサーバーから json データを取得しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

eMule検索がサーバーに接続できない問題の解決方法 eMule検索がサーバーに接続できない問題の解決方法 Jan 25, 2024 pm 02:45 PM

解決策: 1. eMule の設定をチェックして、正しいサーバー アドレスとポート番号が入力されていることを確認します; 2. ネットワーク接続を確認し、コンピューターがインターネットに接続されていることを確認し、ルーターをリセットします; 3. サーバーが正常に動作しているかどうかを確認します。ネットワーク接続に問題がない場合は、サーバーがオンラインであるかどうかを確認する必要があります; 4. eMule のバージョンを更新し、eMule 公式 Web サイトにアクセスし、eMule ソフトウェアの最新バージョンをダウンロードします。 5.助けを求めてください。

RPC サーバーに接続できない、およびデスクトップに入れない場合の解決策 RPC サーバーに接続できない、およびデスクトップに入れない場合の解決策 Feb 18, 2024 am 10:34 AM

RPC サーバーが利用できず、デスクトップからアクセスできない場合はどうすればよいですか? 近年、コンピューターとインターネットが私たちの生活の隅々に浸透しています。集中コンピューティングとリソース共有のテクノロジーとして、リモート プロシージャ コール (RPC) はネットワーク通信において重要な役割を果たします。ただし、場合によっては、RPC サーバーが利用できなくなり、デスクトップにアクセスできなくなる状況が発生することがあります。この記事では、この問題の考えられる原因のいくつかについて説明し、解決策を提供します。まず、RPC サーバーが使用できない理由を理解する必要があります。 RPCサーバーは、

CentOSインストールヒューズとCentOSインストールサーバーの詳細説明 CentOSインストールヒューズとCentOSインストールサーバーの詳細説明 Feb 13, 2024 pm 08:40 PM

LINUX ユーザーとして、CentOS にさまざまなソフトウェアやサーバーをインストールする必要があることがよくありますが、この記事では、CentOS に Fuse をインストールしてサーバーをセットアップする方法を詳しく紹介し、関連する作業をスムーズに完了できるようにします。 CentOS のインストールfusionFuse は、権限のないユーザーがカスタマイズされたファイル システムを通じてファイル システムにアクセスして操作できるようにするユーザー スペース ファイル システム フレームワークです。CentOS への Fuse のインストールは非常に簡単で、次の手順に従うだけです: 1. ターミナルを開き、次のようにログインします。ルートユーザー。 2. 次のコマンドを使用して、fuse パッケージをインストールします: ```yuminstallfuse3。インストール プロセス中のプロンプトを確認し、「y」を入力して続行します。 4. インストール完了

Dnsmasq を DHCP リレー サーバーとして構成する方法 Dnsmasq を DHCP リレー サーバーとして構成する方法 Mar 21, 2024 am 08:50 AM

DHCP リレーの役割は、2 つのサーバーが異なるサブネット上にある場合でも、受信した DHCP パケットをネットワーク上の別の DHCP サーバーに転送することです。 DHCP リレーを使用すると、ネットワーク センターに集中 DHCP サーバーを展開し、それを使用してすべてのネットワーク サブネット/VLAN に IP アドレスを動的に割り当てることができます。 Dnsmasq は、一般的に使用される DNS および DHCP プロトコル サーバーであり、ネットワーク内の動的ホスト構成の管理を支援する DHCP リレー サーバーとして構成できます。この記事では、dnsmasq を DHCP リレー サーバーとして構成する方法を説明します。コンテンツ トピック: ネットワーク トポロジ DHCP リレー上の静的 IP アドレスの構成 集中型 DHCP サーバー上の DHCP リレー D

PHP を使用して IP プロキシ サーバーを構築するためのベスト プラクティス ガイド PHP を使用して IP プロキシ サーバーを構築するためのベスト プラクティス ガイド Mar 11, 2024 am 08:36 AM

ネットワーク データ転送において、IP プロキシ サーバーは重要な役割を果たし、ユーザーが実際の IP アドレスを隠し、プライバシーを保護し、アクセス速度を向上させるのに役立ちます。この記事では、PHP を使用して IP プロキシ サーバーを構築する方法に関するベスト プラクティス ガイドを紹介し、具体的なコード例を示します。 IPプロキシサーバーとは何ですか? IP プロキシ サーバーは、ユーザーとターゲット サーバーの間にある中間サーバーであり、ユーザーとターゲット サーバー間の転送ステーションとして機能し、ユーザーのリクエストと応答を転送します。 IPプロキシサーバーを使用する場合

Epic サーバーがオフラインのときにゲームに参加できない場合はどうすればよいですか? Epic がオフラインでゲームに参加できない理由の解決策 Epic サーバーがオフラインのときにゲームに参加できない場合はどうすればよいですか? Epic がオフラインでゲームに参加できない理由の解決策 Mar 13, 2024 pm 04:40 PM

Epic サーバーがオフラインのときにゲームに参加できない場合はどうすればよいですか?この問題は多くの友人が経験しているはずです。このプロンプトが表示されると、正規のゲームが起動できなくなります。この問題は通常、ネットワークやセキュリティ ソフトウェアからの干渉によって引き起こされます。では、どのように解決すればよいでしょうか?今回の編集者が説明します。解決策を皆さんと共有したいと思います。今日のソフトウェア チュートリアルが問題の解決に役立つことを願っています。オフライン時に epic サーバーがゲームに参加できない場合の対処方法: 1. セキュリティ ソフトウェアによって妨害されている可能性があります。ゲーム プラットフォームとセキュリティ ソフトウェアを閉じて、再起動します。 2. 2 つ目は、ネットワークの変動が大きすぎることです。ルーターを再起動して機能するかどうかを確認してください。状態に問題がない場合は、5G モバイル ネットワークを使用して動作を試みることができます。 3. それならもっとあるかもしれない

PHP FFmpeg 拡張機能をサーバーにインストールするにはどうすればよいですか? PHP FFmpeg 拡張機能をサーバーにインストールするにはどうすればよいですか? Mar 28, 2024 pm 02:39 PM

PHPFFmpeg拡張機能をサーバーにインストールするにはどうすればよいですか? PHPFFmpeg 拡張機能をサーバーにインストールすると、PHP プロジェクトでオーディオ ファイルとビデオ ファイルを処理し、オーディオ ファイルとビデオ ファイルのエンコード、デコード、編集、処理などの機能を実装できます。この記事では、PHPFFmpeg 拡張機能をサーバーにインストールする方法と、具体的なコード例を紹介します。まず、PHP と FFmpeg がサーバーにインストールされていることを確認する必要があります。 FFmpeg がインストールされていない場合は、以下の手順に従って FFmpe をインストールできます。

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

See all articles