- グレハン
- 常連さん
- 会議室デビュー日: 2006/02/23
- 投稿数: 25
|
投稿日時: 2006-12-15 16:16
ASPでの質問です。(.netじゃありません)
やりたいことは
1.入力画面表示
1-1.プルダウン1にはDBから取得した値が表示。
1-2.プルダウン2の値は最初は空白。
プルダウン1の選択値により、DBの値を取得しプルダウン2にセット。
2.次画面に遷移し内容確認
3.前画面に戻って再編集可能
なのですが、
・スタイルシートで表示・非表示を制御の方法でやってみたけど
3の処理をやろうとした場合、プルダウン2の制御がうまくいかず…
・Ajaxとやらを調べて、プルダウン1の値変更で別ファイルを読込み
別ファイルで<OPTION>タグを吐き出してそれを読込むようにしてみたら
プルダウン2の中が文字化け…
(参考にさせて頂いたページ)
http://allabout.co.jp/internet/javascript/closeup/CU20060330A/index.htm
と冴えない今日この頃です。
皆さんは同様の機能を作る時に、どのように作成されているのでしょうか?
また、上記の私のやり方でこう直したらいけるんでは?等のヒントがあれば
教えて欲しいのです。
よろしければお願い致します。
|
- mio
- ぬし
- 会議室デビュー日: 2005/08/25
- 投稿数: 734
- お住まい・勤務地: 神奈川県
|
投稿日時: 2006-12-15 16:25
うーん。
>うまくいかず
>文字化け
このあたりを解決する術を考えればいいのでは。
|
- nagise
- ぬし
- 会議室デビュー日: 2006/05/19
- 投稿数: 1141
|
投稿日時: 2006-12-15 16:43
以前にそういうネタをやったときは、
selectタグふたつの組み合わせがそれほど多くなかったので
最初にHTMLを出力する際にJavaScriptに組み合わせの配列を渡しておき
oncange()でふたつめのselectタグの内容を切り替えていました。
JavaScriptには画面表示の際に初期値をちゃんと渡してやるだけなので
再編集といった場合にも特に難しいことはないですね。
ただ、HTMLでのselectタグの子のoptionタグの初期値は
ユーザ入力値に合わせてやらないといけないぐらいの面倒さはあります。
組み合わせが膨大となる場合、事前にHTMLに書き出しておくのが
非現実的になるのでAJAX的手法にせざるをえないですよね。
そういう要件をやったことがないですが、AJAXで文字化けするなら
そこに焦点を絞ってデバッグするしかないでしょう。
最近はDBもHTMLもソースコードも全部UTF-8にそろえるようにしてますから
文字化けで苦しむことはずいぶんと減りましたね。
|
- グレハン
- 常連さん
- 会議室デビュー日: 2006/02/23
- 投稿数: 25
|
投稿日時: 2006-12-15 17:48
mio様、nagise様 御返答ありがとうございます。
やっぱり文字化けの原因をつかんでなんとかしないとですよね。
あれから文字コードについて色々調べてやってるのですが、
うんともすんともw
一応DB部分をカットした入力画面のソースを載せるので見て下さい。
(jsp部分はパクりまくりですが^_^;)
入力画面(Test.asp)
コード: |
|
<%@ Language=VBScript %>
<%
%>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<head>
<script language="JavaScript">
<!--
function createHttpRequest(){
if(window.ActiveXObject){
try {
return new ActiveXObject("Msxml2.XMLHTTP")
} catch (e) {
try {
return new ActiveXObject("Microsoft.XMLHTTP")
} catch (e2) {
return null
}
}
} else if(window.XMLHttpRequest){
return new XMLHttpRequest()
} else {
return null
}
}
function requestFile(data ,method ,fileName ,async){
var httpoj = createHttpRequest()
httpoj.open(method ,fileName ,async )
httpoj.onreadystatechange = function(){
if (httpoj.readyState==4 && httpoj.status==200){
on_loaded(httpoj)
}
}
httpoj.send(data)
}
function on_loaded(oj){
res = oj.responseText
document.getElementById("writeAREA").innerHTML=res;
}
function cmbChange(mval){
var vurl;
vurl = './Test_sub.asp?SELECT_CD='+mval;
requestFile('','GET',vurl,true);
}
//-->
</script>
</head>
<body>
<form>
<TABLE>
<TR>
<TD>
<SELECT name="sel1" id="sel1" onchange="cmbChange(this.value)">
<OPTION value=""></OPTION><OPTION value="1">TEST1</OPTION><OPTION value="2">TEST2</OPTION>
</SELECT>
</TD>
<TD><DIV id="writeAREA">
<SELECT name="sel2">
<OPTION value=""></OPTION>
</SELECT>
</DIV></TD>
</form>
</body>
</html>
|
プルダウン2のデータ取得用ファイル(Test_sub.asp)
コード: |
|
<%@ Language=VBScript %>
<%
SELECT_CD = Request.QueryString("SELECT_CD")
if SELECT_CD = "1" then
Response.Write "<select name='oioi'>"
Response.Write "<option value='1'>1−1だね</option>"
Response.Write "<option value='2'>1ー2かな</option>"
Response.Write "</select>"
elseif SELECT_CD = "2" then
Response.Write "<select name='oioi'>"
Response.Write "<option value='1'>2−1だね</option>"
Response.Write "<option value='2'>2−2だな</option>"
Response.Write "<option value='3'>2−3かよΣ( ̄o ̄;</option>"
Response.Write "</select>"
else
Response.Write "<select name='oioi'>"
Response.Write "<option value=''></option>"
Response.Write "</select>"
end if
%>
|
tab 半角スペースがカットされてるので見難いですね・・・
[ メッセージ編集済み 編集者: グレハン 編集日時 2007-03-05 15:11 ]
追記
ステータス200をみてなかったのでちょっぴり修正
[ メッセージ編集済み 編集者: グレハン 編集日時 2007-03-05 15:13 ]
|
- nagise
- ぬし
- 会議室デビュー日: 2006/05/19
- 投稿数: 1141
|
投稿日時: 2006-12-15 18:28
引用: |
|
グレハンさんの書き込み (2006-12-15 17:48) より:
tab 半角スペースがカットされてるので見難いですね・・・
|
そういうときにはBBコードのcodeタグを利用します。
http://www.atmarkit.co.jp/bbs/phpBB/faq-japanese.php#bbcode
ソース提示がないと話が進まないので提示するのは結構なのですが
我々は便利な無料デバッグ屋さんではないので興味を引いたとこだけを
流し読みするだけなのでそのつもりで。
引用: |
|
グレハンさんの書き込み (2006-12-15 16:16) より:
ASPでの質問です。
|
JSPだったのですか…orz
気になるのは、
・データを別ファイルで読んでいるようですが
その時点で文字コードが何と認識しているのか?
・HTTPレベルでエンコードは何と返しているか?
といったところですか。
linkタグで外部ファイル読み込むときの文字化けとかと近い話題なのかな?
|
- グレハン
- 常連さん
- 会議室デビュー日: 2006/02/23
- 投稿数: 25
|
投稿日時: 2006-12-15 18:30
自己レスですが、文字化けはなんとかいけました。
Test.aspのfunction on_loaded(oj){}部分を
コード: |
|
function on_loaded(oj){
res = oj.responseText;
res = decodeURI(res);
document.getElementById("writeAREA").innerHTML=res;
}
|
に変更し、
Test_sub.aspを
コード: |
|
<%@ Language=VBScript %>
<%
dim strHTML
SELECT_CD = Request.QueryString("SELECT_CD")
if SELECT_CD = "1" then
strHTML = strHTML & "<select name='oioi'>"
strHTML = strHTML & "<option value='1'>1−1だね</option>"
strHTML = strHTML & "<option value='2'>1ー2かな</option>"
strHTML = strHTML & "</select>"
elseif SELECT_CD = "2" then
strHTML = strHTML & "<select name='oioi'>"
strHTML = strHTML & "<option value='1'>2−1だね</option>"
strHTML = strHTML & "<option value='2'>2−2だな</option>"
strHTML = strHTML & "<option value='3'>2−3かよΣ( ̄o ̄;</option>"
strHTML = strHTML & "</select>"
else
strHTML = strHTML & "<select name='oioi'>"
strHTML = strHTML & "<option value=''></option>"
strHTML = strHTML & "</select>"
end if
Call jsEncode
Sub jsEncode()
Dim sc
Dim js
Dim strEncode
Set sc = CreateObject("ScriptControl")
sc.Language = "JScript"
Set js = sc.CodeObject
strEncode = js.encodeURI(strHTML)
Response.Write strEncode
End Sub
%>
|
にしてみました。
文字化けは解決した(つもり?)なので今後は確認画面から
戻ってきた場合の再表示を頑張ってみます。
追記
CODEタグ使ってみました
[ メッセージ編集済み 編集者: グレハン 編集日時 2006-12-15 18:53 ]
|
- かずくん
- ぬし
- 会議室デビュー日: 2003/01/08
- 投稿数: 759
- お住まい・勤務地: 太陽系第三惑星
|
投稿日時: 2006-12-15 18:38
nagiseさんがヒント書いてくれてるよ。
引用: |
|
最近はDBもHTMLもソースコードも全部UTF-8にそろえるようにしてますから
文字化けで苦しむことはずいぶんと減りましたね。
|
初期表示は文字化けしてる?してない?
文字化けしていないと仮定して、
Javascriptのソースはaspのソースに直書き?外部ファイル?
外部ファイルの場合は、ソースのエンコードを統一する。
metaタグに書かれたエンコードとソースのエンコードは同じ?違う?
違うのなら、ソースのエンコードを統一する。
DBの登録するデータのエンコードは、aspのソースと同じ?違う?
違うのなら、全体を統一する。
統一できないのなら、エンコード変換が正しく行われているか確認する、
といいたいところだけど、Javascriptでエンコード変換ができるかどうか不透明。
#え?ソースのエンコードが分からないって?
#ちょっと気の利いたテキストエディタを探しなさい。
いじょ
追記:
aspぢゃなく、jspってかいてた不具合の修正。orz
[ メッセージ編集済み 編集者: かずくん 編集日時 2006-12-15 18:40 ]
|
- グレハン
- 常連さん
- 会議室デビュー日: 2006/02/23
- 投稿数: 25
|
投稿日時: 2006-12-15 19:06
nagise様 ご返答ありがとうございます
>そういうときにはBBコードのcodeタグを利用します。
そんな便利なものがあったのですね!ありがとうございます。
>流し読みするだけなのでそのつもりで。
コメントを付けて頂けるだけでもありがたいので
今後ともよろしくお願いします。
かずくん様 ご返答ありがとうございます
文字コード、、、わかってるんです、
さっぱり理解してない自分を…orz
エンコード・デコードは再度勉強してきます。
本当にありがとうございました。
|