+ JavaScript の質問用スレッド vol.124 +
レス数が900を超えています。1000を超えると表示できなくなるよ。
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-6のテンプレを読んだ上で質問してください。次スレは>>950が>>2のテンプレ案(本スレで改善案があれば考慮)を元に立ててください
■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
(ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
※必ず「問題の事象が再現されること」を確認してください。
必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) ライブラリ関連の質問は禁止です。関連スレにあるライブラリ質問スレで質問して下さい。
(10) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。
※前スレ
+ JavaScript の質問用スレッド vol.123 +
https://mevius.5ch.net/test/read.cgi/tech/1491143438/
VIPQ2_EXTDAT: checked:vvvvvv:1000:512:: EXT was configured javascriptでメールの送信は無理!
rubyを使うと簡単にできるYO! AWS Lambda/SNS, Ruby など、サーバーが無いと無理 無理といわれてるが、SmtpJSでは不可能なのか
まあ、俺もクライアントサイドでやろうとは思わんが ブラウザ上のjavascriptから直にメールを送る機能はないので
822のqiitaで紹介されてるSmtpJSはSmtpJSのサーバーに通常のフォームデータとしてPOSTしてそのサーバーがメール送信を肩代わりしてくれる
信用できないなら自分でサーバーサイドもどうにかする SMTPサーバーが必要なのは>>822の通り、理解してる
最も、質問者はずっとスルーしてるが 皆さま、ご教示ありがとうございます。
smtp.jsを使い、SMTPサーバーはsmtp.jsで紹介されてるSMTPを使用。
試してみたのですが、うまく動かせておりません。
メールは、サーバーサイドからやるのがベターですよね、やっぱり。。 var yyy =~/g;
var mmm = "$1~”;
aaa[0].innerHTML = aaa_html.replace(yyy, mmm);
で指定する$1の部分は、mmmの変数で指定するか、
複数の変数を埋めるにはどうしたら良いですか?
ようするにyyy以外の変数も埋め込めたい。 >>829
マッチ結果とは無関係の変数を使いたいってことなら、普通に変数を連結するなりテンプレートリテラルで表現したりすればOK
ある程度複雑なことをするつもりなら、別途置換処理用の関数を定義した上でreplace()の第二引数に渡した方が読みやすくなるかも(当然ながら「適切な名付け」が前提)
innerHTMLを使っている点については、あえて何も言わないでおく 年月を設定した2段階プルダウンを作成しているのですが、JAVAを深く触ったことがない為アドバイス頂きたいです。
wordpressのデータベースからSQLを使います。Java scriptでプルダウン作成。
設計について
Java script→JSONで$(配列)に変える→archive.php→SQL→JSON→Java scriptという流れで良いでしょうか? >>832
> JAVAを深く触ったことがない
Java関係ある?
> Java script→JSONで$(配列)に変える
$(配列)とは? >>833
JAVAは変換ミスです申し訳ありません。
option valueの値をそのままSQLに渡す事が出来ないとアドバイスもらいましたので、何とかSQLに渡す方法が知りたいです。
また渡したものと一致するデータをSQLで選別してJava scriptに返す必要があります。
コードは以下になります。
<option value="">年を選択</option>
<option value="op-a">2021</option>
<option value="op-b">2022</option>
</select>
<select name="op-a">
<option value="">2021グループから選択</option>
<option value="op-a-1">1</option>
<option value="op-a-2">2</option>
<option value="op-a-3">3</option>
<option value="op-a-4">4</option>
<option value="op-a-5">5</option>
<option value="op-a-6">6</option>
<option value="op-a-7">7</option>
<option value="op-a-8">8</option>
<option value="op-a-9">9</option>
<option value="op-a-10">10</option>
<option value="op-a-11">11</option>
<option value="op-a-12">12</option>
</select> >>833
option valueの値をJSONを使い配列に変えた上でSQLに渡すことを考えておりました。 >>832
一旦落ち着いて、スレタイと>>1のテンプレを熟読しよう
その上で、一連のデータフロー(処理順序と各処理間のインタフェース)の中で「JavaScriptコードに担わせたい機能」をあらかじめ明確化した上で、「同機能の実装上の不明点・疑問点」を質問しよう 例えば、Ruby on Rails みたいなMVC フレームワークなら、
<%= f.select :pet, [["犬", 1], ["猫", 2]], include_blank: "選択して下さい" %>
こういうselect ボックスで、猫を選べば、
データベース(DB)のpet列が、2 で保存される
多分フォーム送信で、value="2" がサーバーへ送られて、
Railsによって、自動的に整数型の2に変換されて、DBへ保存される
このように、Railsのようなフレームワークを使うと、
DBのテーブル構築とか、HTMLからDBの各列への対応付けも全自動
SQL 文を文字列で、自分で作ったりしない JavaScriptってクラス宣言も関数使ってるらしいけど、関数型言語なの? >>838
もとはschemeを参考にした関数型言語だったのをむりやり関数型言語っぽく仕立てたから
クロージャや部分適用は普通に使えるのに対し、thisやコンストラクタやメソッドはなんか
残念な仕様になった。 console.logが1つしか表示されないんですが、何が原因なんでしょうか?
//オブジェクトを定義するvarは受け取る際にエラーが起きそう再宣言のできるletを選択
let objA = {
// プロパティを定義
// キー: 値
year: "2021",
month: "1,2,3,4,5,6,7,8,9,10,11,12",
};
let objB = {
// プロパティを定義
// キー: 値
year: "2022",
month: "1,2,3,4,5,6,7,8,9,10,11,12",
};
//オブジェクトをまとめる
let allobj = Object.assign(objA, objB);
//JSON.stringifyとは、JavaScriptのオブジェクトや値などのデータをJSONに変換するための関数
let result = JSON.stringify(objA,objB);
//変数「result」に代入
console.log(result); JSON.stringifyをまとめても、let result = JSON.stringify(allobj);
console.logを2つにわけても2021のみ表示されて、2022がどうしても表示されないのですが、何か考えられる原因はありますでしょうか?console.log=JSON.stringify(objA);console.log=JSON.stringify(objB); >>840
ありがとう、理解しました
いちいちコンストラクタとか宣言する気起きなかったから良かった >>843
Object.assignは1番目の引数オブジェクトを直に2番目以降のオブジェクトのキー・値で上書きするものですよ
もしかして
let allobj = [ objA, objB ];
let result = JSON.stringify(allobj); 下記のようにしたら表示されるんですが、変数「result」に代入しておく必要があるため困っております。
let result =にobjA,objB別々にすることはできますでしょうか?
//オブジェクトを定義するvarは受け取る際にエラーが起きそう再宣言のできるletを選択
let objA = {
// プロパティを定義
// キー: 値
year: "2021",
month: "1,2,3,4,5,6,7,8,9,10,11,12",
};
let objB = {
// プロパティを定義
// キー: 値
year: "2022",
month: "1,2,3,4,5,6,7,8,9,10,11,12",
};
//JSON.stringifyとは、JavaScriptのオブジェクトや値などのデータをJSONに変換するための関数
console.log(JSON.stringify(objA));console.log(JSON.stringify(objB)); >>842-843,846
マルチポストか
https://teratail.com/questions/u195apv1x9xtdv
せめてマルチポストのマナーを守れ
https://ja.meta.stackoverflow.com/questions/2418/
>>832,834-835もあなただと思うが、JavaScriptを学習する前にPHPの入門書買うのが先だと思うぞ
form送信するのなら、JacaScriptもJSONも必要ない
PHP側でGETもしくはPOSTでパラメータを受け取れば良い
PHPにはパラメータを配列で受け取る仕組みがあるからな
やりたいことから逆引きするのは止めて、入門書で基礎を固めるべき
回答もらっても理解できんのなら意味がない
回答もらえるだけの明確な質問内容を書けないのなら意味がない
突っ込みどころが多すぎる >>848
アドバイスありがとうございます
マルチポストはすみません。
form通信ではなくSQLを使いアーカイブを表示させるためにプルダウンを作成しています。
Java scriptのオブジェクトでは配列を渡せないのでJSONでシリアライズしてPHPでデコードしてそれをSQLに渡します。
渡されたものから該当の記事を出力させ、PHPで JSONシリアライズした後にAJAXでJava scriptに送り返します。 teratailでのやり取りを見てても根本的に理解が足りてないのがよくわかる
プログラミング始めてどれぐらいか分からんけどもPHPとJavaScriptを組み合わせてどうこうするにはまだ早い気がする >>832見てると、やり方調べてるうちに、不明点の迷路にハマってる気がする
まずは最低限の実装から順番に理解していかないと、解決するものもしないぞ
①WordPressのフロントエンド側からSQLを呼び出す
※SQLの内容は固定、ボタン一つで1つ結果が返ってくれば良い
⇒これだけならWordPressのコミュニティやサポートに聞けば解答が来る
②WordPressのフロントエンドからプルダウン経由(動的に値を変えながら)
SQLを呼び出す
⇒これもWordPressのコミュニティで意見聞いてから、JavaScript側での実装を考えて確認
③以降も同じように実装領域に合わせて確認していく
プログラミングだといきなり最終系考えても
初心者だと実装の過程が滅茶苦茶になるから、まずはシンプルに考えた方が良い >>851
アドバイスありがとうございます。
objAとobjBをボタンとしてクリックさせて、それをPHP側で$識別させることになるのでしょうか?
func btnCliked(
)
let objA=[{year:2021,month:[1,2,3,4,5,6,7,8,9,10,11,12],
}] >>849
謝罪するならすべきことをやってくれ
https://ja.meta.stackoverflow.com/questions/2418/
form送信しないならどうやってデータを送る?
select要素時点で文字列になってるのに、なぜJSONに変換する必要がある?
PHPでどうやって受け取る?
この辺、ちゃんと質問に起こせてないから、質問内容が伝わらなかったり、基礎的な知識不足を指摘されるんだと思うがな >>852
イメージ的にはそんな感じ
ただ>>853も言っているように、フロントエンド(HTML/JavaScript)とバックエンド(PHP)で
どうやってデータの受け渡しをしているのか、っていうのを理解できてないから
本当に入門書読んで勉強し直した方が良いと思うぞ
まずは本当にシンプルに
①Wordpress上でボタンを押して、固定値で値をPHP側に渡す(formのPOST通信)をする
②PHP側で値の受け取りが出来たかを確認する
③確認が出来たら、PHP側からJavaScript側に返り値を固定値で渡す
④WordPress上に返ってきた値を表示できるか確認する
とりあえず最低限の基礎的な動作を実装して、拡張するっていうやり方しないと
この先も大変な事になるぞ >>853
シリアライズするのはJavascript側から配列を渡せないからですよね?
PHPではJSONファイルをnode.jsで作成してそれをPHP側で取得→デコードしてSQLに渡す?でしょうか? >>854
アドバイスありがとうございます。
たしかにSQLで記事の検索をかけるならわざわざJSONを使う必要ないですかね >>855
これそもそもなんで配列を渡したいの?
見たところ年も月も複数選択できるわけじゃなさそうで「2022/6」とか渡せば済む話じゃないの? >>857
SQLから該当記事の検索をさせたいからです
RSSとSQLで交互にレイアウトを出力させているためSQLにどうしても配列を渡したいです PHPはめちゃくちゃHTMLやMySQLと親和性高いからJSは足りない部分補うのが主になるかな
多分他のサーバーサイド言語だとJSの活躍の場広がるんだろう >>856
バックエンド側をどうやって実装するかにもよるけど
例えばSQLに必要な検索キーが1つだけなら、単体の変数でも良いし
複数あっても。渡し方は極端に言ったら自由だぞ?
とりあえず動かすだけなら、複数の値をカンマ区切りの文字列として渡して
PHP側でカンマでsplitかけたら配列として使えるようになるから
それこからSQL文に埋め込むとかでも良いし……
それこそJSON.stringifyとかも、JavaScript上の辞書とか配列を
JSONとして対応できるように文字列に変換してるっていう感じだから
応用みたいな使い方だな(PHP側でunserializeすれば辞書とか配列に復元できる)
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify >>858
答えになってない
2022/6ではSQLで該当記事を検索できない理由を書いてくれないと
あと後半も意味不明 >>855
1, シリアライズする理由は何?
2. どうやってシリアライズしたデータをPHPに送るの?
3. マルチポストは完全無視? >>855
> PHPではJSONファイルをnode.jsで作成してそれをPHP側で取得→デコードしてSQLに渡す?でしょうか?
そもそも、これサーバサイド側の処理になってる
クライアントサイドのJSとサーバサイドのPHPを連携させる話じなかったの?
Node.jsが出てくる理由も謎 これあとでアドバイス貰ったんですがwordpressのSQLにJavascriptを流すって出来ないんですね
フロントデータの送受信が出来ないようなので、という事はwordpressでJavascriptは使えないってことでしょうか… >>866
wordpressのJSONをwordpressの SQLに流す事は不可能なようです。
どうやら過去にウイルスを流された事があるらしくAPI通信が遮断されているようです。
jQuearyなどでファイルをクッションにして無理やり送る事は出来ないんですかね… >>867
SQLにJSONを流すってのがどういうことなのか具体的に説明してくれ
よそでアドバイスもらったんならそれもついでに示せ
あと上の方でもらってるレスをほったらかしにしないで返信しなよ >>868
申し訳ありません。
2段階式年月プルダウンをfront-page.phpに設置しております。
そこからarchive.phpのデータベース(SQL)に送りたいです。
プルダウンでクリックされた月を元にSQLに渡したいのですが、片方がJavascriptである場合、wordpressはフロントデータの送受信が出来ない為成立しません。
これを回避する方法が知りたいです。 会話も噛み合わないし最早全コード晒した方がはえーぞ
現状秘密にするほどの価値も無いだろうし >>860
ボタンクリックが動的だとすると、JavascriptやjQueryから信号を出さないといけない気がするんですが、両方PHPで2段階プルダウンアーカイブ機能を作る事はできるのでしょうか? >>870
wandboxでコードを書いて載せます >>869
>片方がJavascriptである場合、wordpressはフロントデータの送受信が出来ない為成立しません。
これが何言ってるかわからん
具体的なphpなりSQLなりのコードも出してみなよ
もう完全にスレ違いだけど https://wandbox.org/permlink/Fal7HBABk3wT4fpd
archive.phpの170行目から2段階式プルダウン、339行目からSQLになります。 >>875
SQLは340行目だけ?
これのどこに画面で選択した年と月が関係するの? >>876
1.選択した年と月をJSONにして文字にシリアライズします
2.PHP側でJSONでシリアライズします
3.SQLに配列を渡します
4.Javascript側で結果をAJAXで受け取ります
これでプルダウン機能が動作します。
何か間違ってる事はありますでしょうか? >>877
1と2で合計2回シリアライズしてるのが意味不明 >>877
質問を変えるわ
>3.SQLに配列を渡します
このSQLで何を取得するつもりなの? >>878
シリアライズではなく正確にはデコードですかね
$変数に変えてからSQLに渡します >>879
SQLでwordpressのデータベースから該当する記事を出力してPHPで表示したいです >>881
該当する記事を取得するための検索条件は?
今は無条件でページングしてるだけに見えるけど >>880
やはり…そうか
配列にしたいからJSONにしてるのか? >>882
条件は日付と更新日です
日付だけでも良いのですが archive.phpの254行目からSQLを組んでいます。 >>885
>AND (post.post_date LIKE %s OR post.post_modified LIKE %s )
この部分?
これに配列渡すつもりでいるの? >>888
$query = $wpdb->prepare($sql, "%$search_query%", "%$search_query%");
配列はこの部分ですね ANDはwordpressのテーブルからカラムで条件を引いてます >>889
$search_query変数が配列?
$search_queryに具体的にどんな値が入ってる想定なのか書いてみなよ >>891
よく考えてみると$date_queryかもしれません。
検索は出てきたんですが、アーカイブが出てこなかったためsearch_queryにしてましたが… >>892
変数名はこの際どうでもいいよ
SQLにどんな値を渡したいのかが知りたいんだから php get_search_form(); で貰ったワードから検索ページのSQLは出力されています
アーカイブページもおそらくwordpressの既存のアーカイブをクリックしてSQLに繋がるはずです
この配列の渡し方もよく分かってない状態です… >>869,877,880,887
要件
- front-page.phpにselect要素で年月のブルダウンメニュー設置
- front-page.phpの入力値をAjaxでarchive.phpにリクエスト
- archive.phpでパラメータを配列で受け取る
実装
1. front-page.php: のselect要素で配列にしたいもののname属性値に [] をつけておく
2. front-page.php: Fetch APIでFormDataをarchive.phpにリクエスト
3. archive.php: 受け取った配列を元にSQL文生成→クエリを発行→結果をJSONで出力
4. front-page.php: JSON.parse()して後続処理
SQLの下りはPHPの処理なので、ここでは言及しない >>894
検索ページのSQLってのはsearch.phpの258行目からのこと?
こっちは$search_query変数はただの文字列でキーワード検索してるんじゃないの? >>896
そうですね…
という事は$date_query=配列or変数で渡せば過去の記事をSQLで検索する仕組みになりますかね… >>895
- front-page.phpの入力値をAjaxでarchive.phpにリクエスト
についてお聞きしたいんですが、これはフロントデータの送受信にあたらないのでしょうか?
wordpressはJavascriptとjQueryから受け取ることも渡すことも出来ません >>897
だからなんで配列にこだわるの?
"%$search_query%"って使ってる以上配列は受けとれんでしょ
文字列変数で"%2021-01%"とかではあかんの? >>899
いえ配列である必要はないですが、SQLで検索する際に文字は無理だと思うので、一回デコードしてデータにする必要があると思います… >>898
勿論、フロントデータだ
HTMLに書かれたselect要素に入力されたデータはクライアントサイドの情報だからな
WordPressがフロントデータを受信できないのなら、プルダウンメニューに入力された情報をWordPressで受け取る手段がないことになる
ブラウザを使えないようだから、サーバにtxtファイルをアップロードするとか、手段を変えるしかないのでは? >>901
やはり1回クッションを挟む必要があるんですよね?
ただ厄介なのはSQLからも送れないことですねwordpressの SQLなので記事の情報を全てファイルに送ってそれを再度Javascriptに送り返す必要があります 皆さんアドバイスありがとうございます
とても勉強になりました >>900
>SQLで検索する際に文字は無理だと思うので
何を言いたいのか分からん
post.post_date LIKE '2021-01%'
って検索条件にすれば2021年1月の記事は検索できるんじゃないの? >>904
直打ちは考えた事がなかったです…
たしかに可能かもしれません >>905
直打ちしろとは言ってない
文字列変数で済むだろってこと あと君さ、物を知らなくて教えを乞う立場なのに~出来ません、~必要がありますとか断定形使うのやめようよ
君の知らない解決方法なんていくらでもある >>902
1回クッションとは?
フロントデータを受け付けないとは、通信を受け付けないということ
そんなWordPressがあるなら、ブラウザでWordPressを閲覧することすらできない
前提がありえないと俺は思うけどね
あなたは通信周りの知識がかなり怪しい
PHPも明らかに基礎知識が不足してる
この課題は今すぐ解決は諦めて、入門書から始めるのが妥当なんじゃないと俺は思う >>907
で、SQLが配列やオブジェクトを受け取る必要がないなら画面からは年のselectから2021を、月のselectから1を渡せば済む話じゃないの? >>908
申し訳ありませんでした。
以後気をつけます。 >>910
たしかに渡す時は簡単な処理で良くなりそうですね
逆に渡す時はファイルを経由してAJAXが必要になりそうですが >>909
外部のJavascriptとjQeary限定ですので内部データは受け付けてるのではないでしょうか > wordpressはJavascriptとjQueryから受け取ることも渡すことも出来ません
これが真実なら、>>877のAjaxがそもそも不可能だし、なぜJavaScriptスレで質問してるんだ?、という話になる
>>912ではAjaxが実装可能かのように書いてるし、説明がちぐはぐ >>909
完全に同意する
プログラミング全般についてもググって言葉はあれこれ知ってるけど
知識として吸収できてなくてそれらが繋がってないと感じる
こちらから伝えてることも正しく理解できてないだろう
これ以上続けても得るものも少ないだろうし何よりスレ違いだしここまでにしとく
長々とレスしてしまって申し訳なかった >>913
WordPressから見て、内部データといえるのは、サーバ上に置かれているデータだけ
HTML,JavaScriptは外部データ
ブラウザで入力される文字列も外部データ >>916
朝起きてからwordpressの問い合わせフォーラムでもう少し詳しく聞いてみます またあちこちに場違いで意味不明な質問をバラ撒いて場を荒らしていくのだろう プログラミングって「とりあえずやってみて、分からない所を調べる」
ってやり方すると信じられないぐらい余計に分からなくなるからな
体系的に一回勉強して全体のシステムイメージとか
実装のイメージとかがある程度掴まないとマジで意味不明な事をやりだす…… レス数が900を超えています。1000を超えると表示できなくなるよ。