現在PerlのフレームワークであるMojoliciousとJavascriptのjQueryを使ってAjaxを利用したアプリケーションを作ろうとしているのですが、クライアント側で、サーバに送信するためのJSON形式のデータがうまく作れません。

例えば、ブラウザ上の表のセルをダブルクリックしたときにそのデータを書き換えられるようにし、その更新データをJSONでサーバ側に送りたいのですが、
<table>
<tr><th>name</th><th>email</th></tr>
<tr><td class="name">山田</td><td class="email">yamada**@gmail.com</td></tr>
</table>
とある表のセルの山田のアドレスをyamada**@gmail.com -> yamada**@yahoo.co.jpと変更した場合、javascript(jQuery)で次のようなJSONデータを作りたいです。
{ "email" : "yamada**@yahoo.co.jp"}
左側のemailは動的にセルのclass属性から取得したいのですが、方法が分かりません。
実際にはemail以外にも多数の列がありますので、なるべく動的にclass属性を取得したいのですが、良いJSONの生成方法やJSONを用いた他のデータ構造があれば教えていただきたいです。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

>ANo.3



すみません、ダブルクォーテーションとシングルクォーテーションの対応が間違ってますが、
適宜調整して下さい。
    • good
    • 0

JavaScriptオブジェクトをJSON形式でダンプするライブラリとか、


(No.1、No.2で紹介されているのもこのタイプだと思います)
XMLデータを{タグ名:ノードバリュー}に対応させたJavaScriptオブジェクトに変換するライブラリは多いですが、
それ以前の処理、
つまりclassなどからオブジェクトを生成したり、JSONに変換するという独自ルールを使うなら、
自分でオブジェクトに変換したり、JSONで出力しないとダメなのでは?


-----------
var property='email';
var json='{"'+ property + '": "' + document.getElementsByClassName(property)[0] + '"}';

alert(json);

-----------
var property='email';
var object={};
object[property]=document.getElementsByClassName(property)[0];

/*** objectをjsonにダンプするライブラリを使用して下さい ***/
var dump=ライブラリ関数(object);

alert(dump);

------------
なお、classは複数存在させることが可能ですので、
<td class="email">・・・</td>
<td class="email">・・・</td>
となっている場合でも、1つめのemailしか取得できないようにしています。

もし全部を取得するのであれば、
配列にするなど、何らかの処理を施す必要がありますが、
HTMLドキュメントのフォーマットなどに合わせて調整してみてください。
    • good
    • 0

JSON.stringify は ES5 で標準化されたので最近のブラウザなら使用可能です。


http://es5.github.com/#x15.12.3
未対応ブラウザには json2.js を適用すれば対応できます。
http://json.org/js.html

他の手段としては CSV に変換しても良さそうです。
http://codezine.jp/article/detail/2364
http://www.ietf.org/rfc/rfc4180.txt

"name","email"
"山田","yamada**@gmail.com"
"佐藤","satou**@gmail.com"
    • good
    • 0

IEのJscriptでサポートしてるかどうか調べてませんが、


javascript1.7から
 var str = JSON.stringify(value[, replacer [, space]]);
というメソッドがあります。使えそうですね
(参考)
https://developer.mozilla.org/en/JavaScript/Refe …

というより、やっぱりサーバー側でJSONデータに組み立てたほうがよいかな。

※GETやPOSTで送れるのは文字列です。マルチパートでバイナリーファイルも送れますが...
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q忘れがちなバックアップデータを教えてください。

忘れがちなバックアップデータを教えてください。

パーツ交換に伴い再インストールをすることになりそうです。OSはWindows7です。
Windows7ではバックアップ機能がありますが、バックアップをとってもWindows上からしか中身が見えなさそうなので、バックアップ忘れが怖いです。

あー、あのデータバックアップするの忘れてたー!となるのを防ぎたいので、みなさんがバックアップしているデータ、アプリケーションのバックアップデータを教えてください。


私は、
Firefox、ThunderbirdのデータをMozbackupでバックアップ
ランチャーの設定ファイル
Google日本語入力の辞書データ
GoogleChromeのお気に入り
C:\Users\ユーザー名 以下をそのままコピー
(このとき、いらないファイルとかってありますか?AppDataフォルダ以下にLocalなどのフォルダがありますが)

うーん、ちょっと少ない気がして不安です。

Aベストアンサー

C:\Users\ユーザー名\AppData\Local\
以下に
Microsoftフォルダ、Tempフォルダ、Googleフォルダなどありますが
これらは新規システムにも引越ししたほうがいいのでしょうか?
>>そんなに大きくないので、アックアップだけしとけばなんかのときに間に合うでしょう。
引越しですか? バックアップのはなしですよね。。

Tempフォルダなどは新規に持ってきてもゴミになるんじゃないかなとおもったりするのですが、
ここらへんは必要なものを自分の環境にあったものを自分でチョイスしてバックアップする形でいいのでしょうか?
>>あんまり細かくすると、自分でわからなくなりますんで。。おおまかに。。

QJSONをperlで受け取る方法

お世話になります。

jQueryを使用します。
Handsontableを使いたいと思います。
表に入力した内容をperlのCGIにデータ送信して、処理をしたいのですが
どのようにすればいいのかがわからずにいます。

http://handsontable.com/demo/ajax.html
こちらにサンプルがあるのですが、saveのときの処理がよくわかりません。
$.ajax の data にただの文字列を設定すれば、CGIでの受け取り方がわかるのですが、
表のデータ?(handsontable.getData()の部分)の場合、CGIではどのように
受け取れば良いのでしょうか?

$.ajax({
  url: "netaut2.cgi",
  data: {"data": "abcde"},
  dataType: 'json',
  type: 'POST',
   :
}

↑こうであれば、CGI側は

$form = new CGI;
$val = $form->param('data');

このようにして$valに"abcde"とデータが取れますが、

var json_data = [
{"name" : "Taro", "age" : 19},
{"name" : "Hana", "age" : 25}
];
$.ajax({
  url: "netaut2.cgi",
  data: json_data,
  dataType: 'json',
  type: 'POST',
   :
}

のようにした場合がわかりません。

宜しくお願い致します。

お世話になります。

jQueryを使用します。
Handsontableを使いたいと思います。
表に入力した内容をperlのCGIにデータ送信して、処理をしたいのですが
どのようにすればいいのかがわからずにいます。

http://handsontable.com/demo/ajax.html
こちらにサンプルがあるのですが、saveのときの処理がよくわかりません。
$.ajax の data にただの文字列を設定すれば、CGIでの受け取り方がわかるのですが、
表のデータ?(handsontable.getData()の部分)の場合、CGIではどのように
受け取れば良いのでしょうか?

$....続きを読む

Aベストアンサー

use CGI;
use JSON qw/encode_json decode_json/;

my $query = CGI->new;
my $data = $query->param('POSTDATA'); <-今回の質問の肝はおそらくこちらです
my $json_array = $json->decode( $data ); <-JSONデータをPerlで解釈できるように変換

$json_arrayから、扱いたいデータが扱えると思います。

全て英語ですが…参考URLです。
https://metacpan.org/pod/CGI#HANDLING-NON-URLENCODED-ARGUMENTS CGI.pmのparam('POSTDATA')について

http://stackoverflow.com/questions/908113/how-can-i-get-the-entire-request-body-with-cgi-pm
http://stackoverflow.com/questions/15899616/jquery-ajax-to-perl-json-module-decode-of-data

JSONモジュールについて
http://d.hatena.ne.jp/perlcodesample/20100427/1270894115

use CGI;
use JSON qw/encode_json decode_json/;

my $query = CGI->new;
my $data = $query->param('POSTDATA'); <-今回の質問の肝はおそらくこちらです
my $json_array = $json->decode( $data ); <-JSONデータをPerlで解釈できるように変換

$json_arrayから、扱いたいデータが扱えると思います。

全て英語ですが…参考URLです。
https://metacpan.org/pod/CGI#HANDLING-NON-URLENCODED-ARGUMENTS CGI.pmのparam('POSTDATA')について

http://stackoverflow.com/questions/908113/how-can-i-get-the-entire-re...続きを読む

QPS3のデータのバックアップ

PS3のデータのバックアップ
PS3のデータのバックアップについて、バックアップしたデータは別のps3にコピーしてもユーザーとかトロフィーとか変わらないのでしょうか?
ゲームデータだけコピーして他のps3に移すと「他のユーザーのデータなのでトロフィーは取得できない」と書いていました。
バックアップなら途中のデータからでもトロフィーは残っていて、トロフィーを取得しつつゲームを進めることはできるんですか? 
教えてください。

Aベストアンサー

トロフィーデータはそもそもバックアップされません。
ネットに繋いでいるならPlaystation@Networkサーバーに同期する事がバックアップ代わりになります。

こちらに他の本体へリストアできる項目の一覧がありますので参考にどうぞ。
http://jp-playstation.custhelp.com/app/answers/detail/a_id/440/session/L3NpZC9hcmhaZ1Mzaw%3D%3D/p/1/c/7/r_id/100001/sno/0

QJSONのデータから商品名の取得の仕方

今現在下記の記述でJSONを取得しています。

=====
<html>
<head>
<title>JSONのデータを使ってみる</title>
</head>
<script type="text/javascript" src="./prototype.js"></script>
<script type="text/javascript">
function execute() {
var url = './ItemSearch_json.php';
var paramList = "keyword=" + encodeURIComponent("ふくろう");
var a = new Ajax.Request(
url,
{
method: 'get',
parameters: paramList,
onSuccess: function(request) {
// alert('読み込み成功しました');
// jsonの値を処理する場合↓↓
var json;
eval("json="+request.responseText);
},
onComplete: function(request) {
alert('読み込みが完了しました');
$('container').innerHTML = request.responseText;
// jsonの値を処理する場合↓↓
var json;
eval("json="+request.responseText);
},
onFailure: function(request) {
alert('読み込みに失敗しました');
},
onException: function (request) {
alert('読み込み中にエラーが発生しました');
}
}
);
}
</script>
<body>
<div id="container">content</div>
<button onclick="execute()">サンプル実行</button>
</body>
</html>
=====
このままだと、プレーンテキストは表示されるのですが、商品名や価格の一覧などを選択して表示できません。
evalなどを使うのかなと思うのですが、はっきり分かりません。
ヒントを教えていただけないでしょうか。

今現在下記の記述でJSONを取得しています。

=====
<html>
<head>
<title>JSONのデータを使ってみる</title>
</head>
<script type="text/javascript" src="./prototype.js"></script>
<script type="text/javascript">
function execute() {
var url = './ItemSearch_json.php';
var paramList = "keyword=" + encodeURIComponent("ふくろう");
var a = new Ajax.Request(
url,
{
method: 'get',
parameters: paramList,
onSuccess: function(request) {
// alert('読み込み成功しまし...続きを読む

Aベストアンサー

提示されたデータが長いので、例として・・・

var str = '{"encoding":"UTF-8","title":"ValueCommerce Product Database Search Results","link":"http://www.valuecommerce.com"}';
eval('var json = '+ str);
alert(json.title);
alert(json['title']);

Qパソコンデータ(画像)のバックアップについて。

パソコンデータ(画像)のバックアップについて。


パソコンに保存してある画像をバックアップしたいと思うのですが、ちょっと困っている事があります。

主に、大事な画像はマイピクチャというフォルダに入っているのですが、マイピクチャは、マイドキュメントというフォルダにも入ってます(解りづらくてすみません・・・)

この場合、マイドキュメントのバックアップをとっておけば、マイピクチャのデータも一緒にバックアップされるのでしょうか?
それとも、個別にバックアップをとっておくものなのでしょうか?

これは画像だけじゃないのですが、沢山のデータをバックアップする場合でも、データ一つ一つを個別にバックアップしなきゃいけないものなのでしょうか?


バックアップはまだ詳しくなくて(><)
解りづらくてすみません・・・

他にもバックアップに関するアドバイスや注意がありましたら是非教えて下さい。

Aベストアンサー

マイドキュメントというフォルダにマイピクチャフォルダが入っているのなら、
マイドキュメントのバックアップをとっておけば、マイピクチャのデータも一緒にバックアップされます、

バックアップ先は何になりますか? 外付けハードディスク? Dドライブ?
できたら、外付けハードディスクなどに保存される事をお勧めします、
同じCドライブだと、バックアップになりません、

>沢山のデータをバックアップする場合でも…

他のドライブにバックアップするのであれば、まとめてドラッグすれば、
コピーバックアップされます

例としてバックアップする先を決めます(例としてCからDドライブへバックアップとします)
→Dドライブにバックアップフォルダを制作(D:バックアップフォルダ)開きます→
別にスタートからマイドキュメントを開き、ファイルの無い場所からドラッグしてファイル全体を反転します、
→反転したファイルをバックアップフォルダへドラッグします、
コピーバックアップされます

Q現在位置を取得するjavascript

<script type="text/javascript" src="http://gear5.googlecode.com/files/gear5-0.3.js"></script>
<script type="text/javascript">
var setlat ;
var a ;

if (navigator.geolocation == undefined){
// Google Mapで利用する初期設定用の変数
setlat = -1;
}

//位置情報の取得
navigator.geolocation.getCurrentPosition(
successCallback,
errorCallback);
//成功したとき
function successCallback(position){
for (var prop in position.coords){

setlat = position.coords.latitude;

}

}

//失敗したとき
function errorCallback(err){
// Google Mapで利用する初期設定用の変数
setlat = -1;
}
a=setlat;

</script>

上記現在位置を取得するjavascriptで
function successCallback(position)の外でsetlatの値を
処理したいのですがfunction successCallback(position)の中で取得した値が
function successCallback(position)の外で取得できません
どうすれば取得できるのでしょうか。

<script type="text/javascript" src="http://gear5.googlecode.com/files/gear5-0.3.js"></script>
<script type="text/javascript">
var setlat ;
var a ;

if (navigator.geolocation == undefined){
// Google Mapで利用する初期設定用の変数
setlat = -1;
}

//位置情報の取得
navigator.geolocation.getCurrentPosition(
successCallback,
errorCallback);
//成功したとき
function successCallback(position){
for (var prop in position.coords){

setlat = position.coords.la...続きを読む

Aベストアンサー

setlatはグローバル変数になっているので
function successCallback(position)の外でも参照できます。

そのスクリプトの後ろにでも
<input type="button" value="表示" onclick="alert(setlat);">
というボタンをおいてボタンを押してみてください。
successCallbackが呼び出された後であれば、取得した値が表示されるはずです。

なお、そのスクリプトで
a=setlat;
が実行されるのは、successCallbackが呼び出される前なので
aに有効な値は入ってません。

QDドライブのバックアップデータの削除

いつの間にかDドライブにデータを保存していたらいっぱいになってしまったので、
一部のデータを移動させたのですが、ほとんどバックアップのデータでいっぱいになってました。
バックアップデータの削除を削除したいのですが、中身の詳細を見る方法が分からないため大事なバックアップデータが入っていると思うと消す勇気がありません。

また、自動ににバックアップをとるのを止めさせたいです。(自分で設定した覚えがない)
よろしくお願いします。

Aベストアンサー

Windows7の自動バックアップで作成されたデータで
>自分で設定した覚えがない
ということでしたら、世代別の管理も不要でしょうから、古いバックアップを削除すればいいと思います。

●Windows7で古いバックアップのデータを消してハードディスクを軽くする | ぬふふ.com
http://nufufu.com/archives/1803

QJSONファイルの読み込み

{"note":[
{"content":"aaa", "title":"hoge"},
{"content":"bbb", "title":"hogehoge"}
]}

以上のような内容のファイル(note.json)を読み込んで、1つ目のtitle(hoge)を取り出し、

<a href="hoge.html" title="">link</a>

のtitleの部分に挿入したいのですが、どなたかご教授お願いいたします。

Aベストアンサー

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "?http://www.w3.org/TR/html4/strict.dtd">
<title>set Title?</title>

<a href="hoge.html" title="" id="a">link1</a>
<a href="hoge.html" title="" id="b">link2</a>

<script type="text/javascript">
eval('var a={"note":[ {"content":"aaa", "title":"hoge"},{"content":"bbb", "title":"hogehoge"} ]}');
document.getElementById('a').setAttribute('title',a.note[0].title);
document.getElementById('b').title=a.note[1].title;

</script>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "?http://www.w3.org/TR/html4/strict.dtd">
<title>set Title?</title>

<a href="hoge.html" title="" id="a">link1</a>
<a href="hoge.html" title="" id="b">link2</a>

<script type="text/javascript">
eval('var a={"note":[ {"content":"aaa", "title":"hoge"},{"content":"bbb", "title":"hogehoge"} ]}');
document.getElementById('a').setAttribute('title',a.note[0].title);
document.getElementById('b').title=a.note[1].title;

<...続きを読む

Qntbackupでバックアップしたデータの消去

現在 Windows Server 2003を使用しています。
ntbackupを使って毎週データのバックアップをとっています。

今の状態だとデータがどんどん追加されていくだけなのですが、古い(1ヶ月前とか)のバックアップデータを消去することはできるのでしょうか?

また、今はタスクで自動的に毎週バックアップをとるようにしているのですが、例えば2週間分だけ残して古いデータは消去し、それから最新のデータをバックアップするようなことはできるのでしょうか?

Aベストアンサー

テープデバイスではなくて、ディスク上にバックアップを作成しているのですね。
まず、『データを追加する』ではなく、『データを置き換える』ようにバックアップジョブを作り直す必要があります。
Weeklyにバックアップを"WeeklyBackup"にとるとしたら、タスクを利用して、バックアップの直前に
WeeklyBackup0というファイルをWeeklyBackup1に、
WeeklyBackupをWeeklyBackup0に、
それぞれコピーをするバッチファイルを実行するようにスケジュールします。
つまりWeeklyBackup0が先週のバックアップ、WeeklyBackup1が先々週のバックアップになるわけです。

QIEでJSONが読み込めない

IEでJSONが読み込めないので、以下のサイトのソースをそのまま持ってきて動かしてみましたが、読み込めませんでした。

http://www.outcut.de/MooFlow/example-ajax.html

なので多分プログラム自体には問題がないのだと思うので、サーバの設定か何かかなと予想されるのですが、IEでJSONを読み込ませるために何かサーバの設定をしなければならないのでしょうか?

ご教授ください。よろしくお願いいたします。

Aベストアンサー

追加
こちらもご覧ください。

参考URL:http://d.hatena.ne.jp/khiker/20081026/javascript_json


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング