データを入力しOKボタンを押すとcgiが呼び出され、データをメールで送信するプログラムがあるのですが、
あるASPのDBサービスにもデータを保管したいと考えました。
そのASP側の設定は終わり、マニュアル通り<form action="外部URLリンク~/servlet.WebToLead?encoding=UTF-8" method="POST"><~id設定処理~>を埋め込めば、ASPへのデータ登録は成功したのですが、これをすると元のメール送信のcgi呼び出しと両立できなくなってしまいました。(1操作では1つのaction="~"しか指定できないため)
まずはcgiを呼び出し、メール送信処理をしてから、<form action="外部URLリンク~/servlet.WebToLead?encoding=UTF-8" method="POST">と同等の処理を実行させることを考えているのですが、このようなことは可能でしょうか?どうやったらできるでしょうか?
他の方法でもいいのですが、
・javascriptでは方法があるようですがクライアント依存はしたくないです
・ユーザに2回ボタンを押させたりはせず、1回のボタン押下で2つの処理を実行
の条件でお願いします。
よろしくお願いいたします。
可能です。
PerlスクリプトともASPのパラメタもないので具体的な回答はできませんが、
下記の記事を参考にcgiを書き換えてみてください
ありがとうございます、頂いたURLの内容通りやればできそうな気がしてきました。
HTML のみでは不可能です。
基本的には JavaScript で2つの form 送信を行うことを考えた方がよいでしょう。
・javascriptでは方法があるようですがクライアント依存はしたくないです
この程度であれば、ほとんど差がないか吸収するバッドノウハウがあります。
また、依存性を吸収してくれるライブラリ等を使用するのも手でしょう。
もう一つの方法としては HTML からは CGI または ASP の片方のみデータ送信し、
データを受け取った方はもう片方に HTTP or HTTPS 経由でデータを渡すことが出来ます。
仕組みはややこしくなりますが、片方だけ呼ばれると言った不具合等は防ぎやすくなります。
ありがとうございます、依存性吸収のノウハウを検索したら、意外に情報が多く驚きました。
こちらも検討してみます。
・同じドメインであればAjaxでPOST後にsubmit
・違うドメインであればAjaxでGET後にsubmit
となる様にonsubmit等でフックしてあげればクライアント側だけで出来なくもないですが、CGI側でやるのがトランザクションも制御出来て良いかと思います。PerlであればPOST先のCGIでother-hostへ転送する様なスクリプトは...
use CGI; use LWP::UserAgent; use HTTP::Request::Common qw(POST); my $q = CGI->new; my $url = 'http://other-host/regist.cgi'; my %formdata = $q->param; my $request = POST($url, [%formdata]); my $ua = LWP::UserAgent->new; my $res = $ua->request($request);
で行けるかと思います。
ありがとうございます、頂いたURLの内容通りやればできそうな気がしてきました。