JavaScript は XML データを読み取り、page_javascript スキルに表示、編集、保存します。
javascript
xml
まずどの方法を使用するかを検討し、次の 3 つの方法を検討します。 1. C# が HTML を結合してテーブルを構築し、変更と保存は Ajax を通じて実装されます。 2. XML XSL、表示および変更は 2 つの XSL ファイルを使用して行われ、XML の変更および保存には Ajax が使用されます。 3. GridView コントロール。
慎重に検討した結果、まず、3 番目のオプション GridView コントロールはニーズを満たすことができません。これは、XML 形式が多様であり、行と列の結合や行と列のヘッダーの結合が頻繁に行われる可能性があるためです。最初のオプションは、座って行うのが非常に面倒で、細かい肉体的な作業が必要であり、ニーズが変化した後に修正するのは困難です。したがって、2 番目のオプションを選択します。 XPath と XSLT の学習を開始します。 AJAX は js を使用して、ファイルを処理する一般的な方法 (ashx) を非同期的に呼び出します。
1. 選択ボックスのバインド (Ajax を介してデータベースを読み取り、データをバインドする) を実装するときにエラーが発生しました。最終的に、XML を読み取るときに使用される非同期メソッドが Ajax と競合することが判明しました。これは同期によって解決できます。 。
2. XML を保存します。変更したデータを XML に保存するにはどうすればよいですか? Javascriptで保存する場合、jsで保存する場合はhtaを使用する必要がありますが、AJaxで保存する場合、どうすれば変更されたXMLをAJAXメソッドに渡すことができますか?ついに試してみました。 ソースコード
js:
コードをコピー コードは次のとおりです。
var $=function (id){return document.getElementById(id);}
var xmlHttp;
var curValue;
function ToEdit(); 🎜>var xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
var xsl = new ActiveXObject("Microsoft. XMLDOM");
xsl.async = false;
xsl.load("myxsl_edit.xsl");
document.write(xml.transformNode(xsl));
document.close() ;
//選択ボックスをバインド
LoadSelect();
//xml を保存
function Save(){
var oDoc = new ActiveXObject("MSXML2.DOMDocument. 3.0 ");//応答結果の取得を担当します
oDoc.async = false;
oDoc.resolveExternals = false;
oDoc.load("myxml.xml");
var data = oDoc . selectNodes("//Data[@IsEdit='1']");//要求されたメジャー クラスが属するすべてのスモール クラスのクラス名を読み取ります
for(var i=0; i {
var ノード ID;
for(var j=0; j{
if(data[i].attributes[j].nodeName=="IsEdit")
{
nodeEdit = data[i].attributes[j].nodeValue;
else if(data[i].attributes[j].nodeName=="id")
{
nodeID = data[i].attributes[j].nodeValue; >else if( data[i].attributes[j].nodeName=="Type")
{
nodeType = data[i].attributes[j].nodeValue;
}
if (nodeType=="Combox")
{
var combox = $(nodeID);
if(combox!=null)
{
if(combox.options. length>0)
data[i].text = combox.options[combox.selectedIndex].value;
}
}
else
{
data[i].text = $(nodeID ).value;
}
}
var strXML = oDoc.xml;
var url="saveXML.ashx"; ,"POST" ;
if(xmlHttp.status==200)
{
var rtn = xmlHttp.responseText;
if(rtn=="true")
alert("正常に保存されました! ");
}
else
{
alert("保存に失敗しました!");
}
Show();
}
}
}
function Show()
{
// XML の読み込み
var xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.load("myxml.xml");
// XSL をロードします
var xsl = new ActiveXObject(" Microsoft.XMLDOM");
xsl.async = false;
xsl.load("myxsl.xsl");
document.write(xml.transformNode(xsl));
document.close ();
}
/////////////////绑定下选择框/////////////// ////////
function LoadSelect()
{
var allcontrols = document.all;
for(var j=0;j {
if(allcontrols[j].tagName=="SELECT")
{
var datainfo = allcontrols[j].flex
//datainfo:tablename^value^name^selectedvalue
var datainfo_sp = datainfo.split(');
if(datainfo_sp.length>2)
{
var selectID = datainfo_sp[0]
var selectedValue = datainfo_sp [2];
var datainfo_sp_sp = datainfo_sp[1].split('^');
var 値 = datainfo_sp_sp[1]; datainfo_sp_sp[2];
var control = $(selectID);
var param = "table=" テーブル "&value=" 値 "&text=" テキスト;
curControl = コントロール;
curValue = selectedValue;
var callback = BindSelect;
StartRequest("getDataSet.ashx", param, BindSelect,null,"GET");
}
}
}
}
function BindSelect()
{
//可以下面两个if语句,没有异步方式
if(xmlHttp .readyState==4)
{
if(xmlHttp.status==200)
{
var control = curControl;
var selectedValue = curValue;
var data = xmlHttp.responseText;
if(data != null || data !="")
{
control.add(new Option("",""));
var data_sp = data.split(');
for(var i=0; i{
var data_sp_sp = data_sp[i].split('^');
if(data_sp_sp.length>1)
control.add(new Option(data_sp_sp[1], data_sp_sp[0]));
}
for(var i =0;i{
if(control.options[i].value == selectedValue)
{
control.selectedIndex = i;
休憩;
}
}
}
}
}
}
///////////////////绑定下选择框///////////////////////
///////////////////实现Ajax/ //////////////////////////
function StartRequest(url,param,callback,sendString,type)
{
if (window.XMLHttpRequest)
{
xmlHttp=new XMLHttpRequest();//mozilla浏览器
}
else if(window.ActiveXObject)
{
try
{
xmlHttp=new ActiveXObject("MSXML2.XMLHTTP");//IE旧バージョン
}
catch(e)
{
try
{
xmlHttp=new ActiveXObject ("Microsoft.XMLHTTP");//IE新バージョン
}
catch(e)
{
}
}
if(!xmlHttp)
{
window.alert("XMLHTTPREQUEST对オブジェクトを構築できません!");
false を返します。
}
}
var strURL = url (param != "" && param!=null ? "?" param : "");
sendString = "param=" sendString;
xmlHttp.open(type,strURL,false);
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
xmlHttp.onreadystatechange=callback;
xmlHttp.send(sendString);
}
xml
var $=function (id){return document.getElementById(id);}
var xmlHttp;
var curValue;
function ToEdit(); 🎜>var xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
var xsl = new ActiveXObject("Microsoft. XMLDOM");
xsl.async = false;
xsl.load("myxsl_edit.xsl");
document.write(xml.transformNode(xsl));
document.close() ;
//選択ボックスをバインド
LoadSelect();
//xml を保存
function Save(){
var oDoc = new ActiveXObject("MSXML2.DOMDocument. 3.0 ");//応答結果の取得を担当します
oDoc.async = false;
oDoc.resolveExternals = false;
oDoc.load("myxml.xml");
var data = oDoc . selectNodes("//Data[@IsEdit='1']");//要求されたメジャー クラスが属するすべてのスモール クラスのクラス名を読み取ります
for(var i=0; i {
var ノード ID;
for(var j=0; j{
if(data[i].attributes[j].nodeName=="IsEdit")
{
nodeEdit = data[i].attributes[j].nodeValue;
else if(data[i].attributes[j].nodeName=="id")
{
nodeID = data[i].attributes[j].nodeValue; >else if( data[i].attributes[j].nodeName=="Type")
{
nodeType = data[i].attributes[j].nodeValue;
}
if (nodeType=="Combox")
{
var combox = $(nodeID);
if(combox!=null)
{
if(combox.options. length>0)
data[i].text = combox.options[combox.selectedIndex].value;
}
}
else
{
data[i].text = $(nodeID ).value;
}
}
var strXML = oDoc.xml;
var url="saveXML.ashx"; ,"POST" ;
if(xmlHttp.status==200)
{
var rtn = xmlHttp.responseText;
if(rtn=="true")
alert("正常に保存されました! ");
}
else
{
alert("保存に失敗しました!");
}
Show();
}
}
}
function Show()
{
// XML の読み込み
var xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.load("myxml.xml");
// XSL をロードします
var xsl = new ActiveXObject(" Microsoft.XMLDOM");
xsl.async = false;
xsl.load("myxsl.xsl");
document.write(xml.transformNode(xsl));
document.close ();
}
/////////////////绑定下选择框/////////////// ////////
function LoadSelect()
{
var allcontrols = document.all;
for(var j=0;j
if(allcontrols[j].tagName=="SELECT")
{
var datainfo = allcontrols[j].flex
//datainfo:tablename^value^name^selectedvalue
var datainfo_sp = datainfo.split(');
if(datainfo_sp.length>2)
{
var selectID = datainfo_sp[0]
var selectedValue = datainfo_sp [2];
var datainfo_sp_sp = datainfo_sp[1].split('^');
var 値 = datainfo_sp_sp[1]; datainfo_sp_sp[2];
var control = $(selectID);
var param = "table=" テーブル "&value=" 値 "&text=" テキスト;
curControl = コントロール;
curValue = selectedValue;
var callback = BindSelect;
StartRequest("getDataSet.ashx", param, BindSelect,null,"GET");
}
}
}
}
function BindSelect()
{
//可以下面两个if语句,没有异步方式
if(xmlHttp .readyState==4)
{
if(xmlHttp.status==200)
{
var control = curControl;
var selectedValue = curValue;
var data = xmlHttp.responseText;
if(data != null || data !="")
{
control.add(new Option("",""));
var data_sp = data.split(');
for(var i=0; i
var data_sp_sp = data_sp[i].split('^');
if(data_sp_sp.length>1)
control.add(new Option(data_sp_sp[1], data_sp_sp[0]));
}
for(var i =0;i
if(control.options[i].value == selectedValue)
{
control.selectedIndex = i;
休憩;
}
}
}
}
}
}
///////////////////绑定下选择框///////////////////////
///////////////////实现Ajax/ //////////////////////////
function StartRequest(url,param,callback,sendString,type)
{
if (window.XMLHttpRequest)
{
xmlHttp=new XMLHttpRequest();//mozilla浏览器
}
else if(window.ActiveXObject)
{
try
{
xmlHttp=new ActiveXObject("MSXML2.XMLHTTP");//IE旧バージョン
}
catch(e)
{
try
{
xmlHttp=new ActiveXObject ("Microsoft.XMLHTTP");//IE新バージョン
}
catch(e)
{
}
}
if(!xmlHttp)
{
window.alert("XMLHTTPREQUEST对オブジェクトを構築できません!");
false を返します。
}
}
var strURL = url (param != "" && param!=null ? "?" param : "");
sendString = "param=" sendString;
xmlHttp.open(type,strURL,false);
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
xmlHttp.onreadystatechange=callback;
xmlHttp.send(sendString);
}
xml