ホームページ  >  記事  >  バックエンド開発  >  XMLHTTPを利用して非常に長いXML形式データを送信する方法を詳しく解説

XMLHTTPを利用して非常に長いXML形式データを送信する方法を詳しく解説

黄舟
黄舟オリジナル
2017-03-27 17:03:431455ブラウズ

ASP フォームの TEXTAREA など、POST データの一部として大量の XML を IIS サーバーに送信すると、予期しない結果が生じる可能性があります。データがサーバー上で処理されるとき、データの処理方法が原因でエラーが発生する可能性があります。その理由は、データをサーバーに送信するときに、POST フィールドに (データ) サイズ制限があるためです。この目的は、侵入者がサービス拒否 (DoS) 攻撃でサーバーに非常に大量のデータを送信するのを防ぐことです。

この制限により、あなたの能力も制限されます。しかし、この問題を回避する方法はあります。 FORM 送信によるデータの送信のみに限定されない場合は、XMLHTTP

オブジェクト (Microsoft の XML セットの DOM オブジェクト ) を使用して必要な XML を送信できます:

var oXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");
oXMLHTTP.open("POST", "xml_handler.asp", false);
oXMLHTTP.send(xml_to_send);

Request オブジェクトのおかげで、 IStream

インターフェース を備えているため、DOMDocument オブジェクトのload() メソッドを使用して送信する XML をロードできます:

Dim oDOM
Set oDOM = Server.CreateObject("MSXML2.DOMDocument")
oDOM.load Request

FORM を使用した送信のみに制限されている場合は、複数の TEXTAREA または INPUT を送信してこれを解決できます。制限がありますが、最初の 2 つは、サーバーが FORM データを受信するとすぐに再構築できます:

var MAXLEN = 90000;
var oForm = document.createElement("FORM");
oFORM.method = "POST";
oFORM.action = "xml_handler.asp";
oFORM = document.body.appendChild(oFORM);
var s = document.someForm.txtXML.value;
if (s.length > MAXLEN) {
   while (s.length > MAXLEN) {
     var o = document.createElement("INPUT");
     o.type = "hidden";
     o.name = "txtXML";
     o.value = s.substr(0, MAXLEN);
     oFORM.appendChild(o);
     s = s.substr(MAXLEN);
   }
   var o = document.createElement("INPUT");
   o.type = "hidden";
   o.name = "txtXML";
   o.value = s.substr(0, MAXLEN);
   oFORM.appendChild(o);
} else {
   var o = document.createElement("INPUT");
   o.type = "hidden";
   o.name = "txtXML";
   o.value = s;
   oFORM.appendChild(o);
}

このコード部分は、データの送信を処理するための新しい FORM 要素を作成し、それは BODY 要素内に配置されます。次に、サーバーに送信しようとしている XML の長さをチェックします。この XML は、someForm 内の txtXML と呼ばれる TEXTAREA に存在します。

XML が 90,000 文字の MAXLEN より大きい場合、このコードは複数の非表示の INPUT 要素を作成し、値の

属性 を 90,000 文字の XML データ、または XML の末尾に設定します。分割する特定の値このデータを複数の部分に分割します。この XML のサイズが MAXLEN より小さい場合、このコードは単に INPUT を作成し、それに応じて値を設定します。このデータは処理のためにサーバーに送信されます。

新しいフォームの各フィールドに同じ名前 (txtXML) を割り当てたことに気づいたかもしれません。これは、送信される可能性のある他のデータから XML データを分離するのに役立ち、XML データを再編成する簡単な方法を提供します。データを再編成するときは、フィールド内のデータを結合するための単純な

ループ が必要です。

Dim str, fld
For Each fld In Request.Form("txtXML")
   str = str & fld
Next

FORM 要素ごとにフィールドセットが作成されているため、同じ名前のフィールドを反復処理できます。クライアント側で FORM 要素を正しい順序で作成している限り、フィールドが走査される順序を気にする必要はありません。これは、FORM の appendChild() メソッドを使用して簡単に実行できます。

データはクライアントでは左から右、上から下の順序で送信されるため、FORM 要素の最後に INPUT 要素を追加すると、サーバーでは常に同じ順序でデータが受信されます。

大量の Excel データをクライアント マシンからサーバーに転送するなど、大規模なデータ ソリューションの実装を検討している場合は、FORM 送信を使用するか、データを論理的に複数の小さな部分に分割するかを再検討する必要があります。ファイル タイプの INPUT 要素は使用できないため、最も創造的な解決策は、データをローカルで XML に変換し、その XML データをサーバーに送信することです。さらに、データはさらなる処理が必要になるまでサーバーに保存されます。

もちろん、この問題を処理するより良い方法があるかもしれません。しかし、時間があまりない場合に必要なのは、すぐに使える解決策だけです。

以上がXMLHTTPを利用して非常に長いXML形式データを送信する方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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