アプリ版:「スタンプのみでお礼する」機能のリリースについて

javascriptは1年生です^^
データバインドを利用して、テーブルにデータを表示しています。

document.write("<object id='setData' classid='clsid:333C7BC4-460F-11D0-BC04-0080C7055A83'>");
document.write("<param name='DataURL' value='setdata.csv'>");
document.write("<param name='UseHeader' value='true'>");
document.write("</object>");
document.write("<table border='1' datasrc='#setData'>");
document.write("<tr>");
document.write("<td><span datafld='data1'></span></td>");

とこんな感じで続くのですが、csvファイルのデータには、セル幅や背景色等の設定値も含まれています。

これらのデータは表示用のデータではないので、変数として取込まなければなりません。
普通なら、bodyタグの中に、
<input type="hiden" datafld="optionData1">
と書いて、そこからjavascriptで取込むことは可能ですが、document.writeを使うとbodyタグの中が書き換わってしまうので使えません。

(csvファイルの1行分のデータを、HTMLのテーブルで表示する時には、4行~6行と行数が変動するので、予めテーブルをbodyタグの中に書いておくことが出来ません。テーブル行数はスクリプト内で決定するので。なのでbodyタグの中は空でオールjavascriptでHTMLを生成しています)

もう一つの方法はフレームを使って、parentで、データを送ることも考えたのですが、もっとスマートな方法はないでしょうか??

A 回答 (5件)

データバインドで色々調べてみました。


以下のようにすると変数(配列)に格納できそうです。
お試し下さい。

前提は6フィールドの内、
3フィールドを表示(data1~data3)、
残り3フィールド(data4~data6)を配列に格納する場合です。

<script>
function start(){

setData.Reset();//リセット

var rs = setData.recordset;
data=new Array();
for(i=0;i<rs.RecordCount;i++){
data[i]=new Array();
data[i][0]=rs.Fields("data4").value;
data[i][1]=rs.Fields("data5").value;
data[i][2]=rs.Fields("data6").value;
rs.MoveNext();
}

setData.Reset();//リセット

//格納されたか確認
for(i=0;i<rs.RecordCount;i++){
alert(str=data[i].toString());
rs.MoveNext();
}

setData.Reset();//リセット

}
</script>

<body onload="start()">

<object id="setData" classid="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">
<param name="DataURL" value="setdata.csv">
<param name="UseHeader" value="true">
</object>

<table datasrc="#setData" border="1">
<tr>
<td><span datafld="data1"></span></td>
<td><span datafld="data2"></span></td>
<td><span datafld="data3"></span></td>
</tr>
</table>

</body>
    • good
    • 0
この回答へのお礼

更なるご回答ありがとうございます。
別なページを用意しなくても出来そうですし、これが一番スマートかも知れませんね。
(URLを使ってデータを転送することを試みたのですが、出来ることは出来ましたが、データ丸見えでスマートじゃありませんでした^^;)
このスクリプトを参考にさせていただきます。なんとか解決の糸口が見えてきそうです!
ありがとうございました。

お礼日時:2006/01/26 23:13

カレンダーということなのでデータは恐らく日~土の7カラムの行が少ない場合で4行


多い場合は6行。このデータと各日ごとにカスタマイズする表示形式の指示が同じCSV上
に書かれてるという理解でよろしいでしょうか。

>それで設定画面を別に作り、CGIで幅や背景色等の設定値をcsv形式で保存するようにし

CGIでデータを書き出す際に、日にちのデータと表示のデータを切り分け、
日にちのデータはCSV、表示形式は最大31要素の2次元配列としてjsファイルに書き出す
ようにCGIを書き換えれば一番簡単化かなと思います。

それが無理なら表示要素のデータを右によせてdisplay:noneで非表示
tableの子要素のinnerTextから非表示列の表示データを拾いあげて配列に格納する。



データバインドではなく、隠しインラインフレームにCSVをplaintextとして読込んでカンマで切り分け、
変数に配列として格納するクラスを提供している方がいますので
下記URLもご参照ください。

参考URL:http://www5c.biglobe.ne.jp/~horoau/js_library/da …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ちょっと忙しくなって、ご提案いただいた方法について検証する時間がなく、お返事が遅くなってしまいました。

 display:noneで非表示するというアイデアは思いつきませんでした。いいかも知れませんね^^

参考URLを見てみましたが、面白そうなので時間のあるときに勉強してみたいと思います。

お礼日時:2006/01/26 23:03

各人のパソコンの設定如何では使用不能ですね。


セキュリティホールを開けなければならないので。
なぜ CGI が普及したのか、教科書の最初の3ぺージ程度を読んで
理解し、納得し、CGI の習得に励むのが最もスマートでしょう。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
CGIは自分で作ることは出来ないものの、簡単な改造程度なら、なんとか・・・なんですが^^
今回の設定値のcsvファイルの保存に関しても、<< のところを < にして上書き保存にしたりとか・・・
そんなわけで、最初からCGIで出来れば一番なのは分かっているのですが^^;
CGIについては是非習得したいと思っています。

お礼日時:2006/01/25 16:24

>CGIで幅や背景色等の設定値をcsv形式で保存するようにし、見る側は、どのパソコンでも同じ設定で見えるようにしたいのです。


表示に関する設定部分をXMLとして保存し、Ajax的なやり方で設定を取り込む様にしたらどうでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
Ajaxというのは何度か聞いたことがありますが、先日初めて検索して関連サイトを覗いてみました。
これについては今後の課題ということで^^

お礼日時:2006/01/25 16:18

質問の内容が曖昧で何を聞きたいのかが良く分かりません。



そもそもCSVに表示しないdataを含ませる意味がわかりません。
セルの幅や背景色ならCSSまたはjsの外部ファイルに切り分ければ済む事と思いますが。

この回答への補足

云わば、「カレンダー・メーカー」なるものと考えて下さい。CGIで色々探したのですが、合うものがありませんでした。
(会社によっては水曜日が休日でもカレンダーの色が赤にならない等)
それでjavascriptで作ることになりました。CGIとかは出来ませんので^^;
javascriptがクライアント側で動作するため、設定したものが、他のPCでは反映されずに初期値で表示してしまいました。当然ですね^^;
それで設定画面を別に作り、CGIで幅や背景色等の設定値をcsv形式で保存するようにし、見る側は、どのパソコンでも同じ設定で見えるようにしたいのです。

補足日時:2006/01/23 17:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!