プロが教えるわが家の防犯対策術!

下記form内のsubmitボタンをクリックしたとき以下の条件を満たしたいです。
(1) actionで外部リンクを新規タブで開く
(2) 同時にregist.phpへパラメータ(kanryo=0)を持たせて遷移

========================================
【head内】
<script>
jQuery(document).on("click", '#viewing', function() {
$.get("regist.php", {
kanryo: "0"
}, function(data) {});
});
</script>


【body】
<form action="外部リンクURL" method="POST" target="_blank">
 <input type="hidden" name="SAMLResponse" value="<?=$samlresponse ?>" />
<input type="submit" value="動画を視聴する" id="viewing">
</form>
========================================

■問題点
(1) でPOST送信できており遷移するが、(2) の遷移が何の変化もなくできていない。
JavaScript での飛ばし方が問題があるのかと思ったのですが、
他者が以前書いた記述であるのと、JavaScriptについてほぼ無知なので原因がわかりません。

このJavascript の記述でregist.phpへ遷移はできるはずなのでしょうか?
問題ないのであれば、それ以外の部分でおかしいところを検証します。

別内容になりますが、飛ばしたいパラメータを2にしたい場合は
このJavascript の記述はどしたら良いでしょうか?

前提知識が少ないため、調べても判断ができず、申し訳ありません。
どうぞよろしくお願いいたします。

質問者からの補足コメント

  • うーん・・・

    loactionで遷移挙動はできました!が2つのパラメータが変なのかURL末尾が"regist.phpundefined"と、404エラーに…。
    <?php $PARAMETER = "?kanryo=".$KANRYO."&id=".$ID; ?>
    <form action="リンク" method="POST" target="_blank">
     <input type="submit" value="動画を視聴する" class="viewing" id="<?=$PARAMETER;?>">
    <script>
     $(".viewing").click(function() {
      setTimeout(function(){
       location.href = "regist.php" + this.id;
      }, 2*1000);
    });
    </script>
    </form>

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/11/28 20:39

A 回答 (2件)

No1です



>"regist.phpundefined"と、404エラーに
404はFile Not Foundです。
要は、リクエスト先が見つからないということになります。

setTimoutの処理では、一旦、イベント関数から解放されているので、this値は(多分)windowになっているものと想像します。
この結果、this.idはundefinedとなっていて、遷移先のlocationとして「regist.phpundefined」を指定してることになっているものと思います。


this値ではなく、一旦、変数に代入しておけば、参照可能になります。
例えば、
$(".viewing").click(function() {
const url = "regist.php" + this.id;
setTimeout(function(){ location.href = url; }, 2*1000);
});
とするなど。

※ 時間差はブラウザにsubmit処理を行わせるためだけなので、2秒もなくても良いのではと思います。
    • good
    • 0
この回答へのお礼

助かりました

一旦、変数に代入する方法でうまく値を飛ばすことができました!

おそらく初歩的なことだったとは思いますが、
丁寧に教えてくださり、本当にありがとうございました!!

時間も500にしてみました。

お礼日時:2021/11/28 22:59

こんばんは



>(2) の遷移が何の変化もなくできていない。
$.get()はajaxのメソッドです。ですのでページ遷移は発生しません。
https://api.jquery.com/jQuery.get/

regist.phpが何を返しているのか不明ですけれど、戻り値のdataを利用してHTMLを書き換えるか、あるいは、単に遷移をするだけなら、location.hrefを上書きする方法の方が簡単です。
https://developer.mozilla.org/ja/docs/Web/API/Lo …

ただし、ブラウザのsubmit動作前に遷移してしまうと、submitが行われなくなる可能性がありますので、setTimeout等で時間差を作る必要がありそうに思います。
(ajaxの場合は、遷移が起きないのでそのような必要はありません)

>飛ばしたいパラメータを2にしたい場合は~
どのパラメータのことかわかりませんが・・・
「SAMLResponse」であるなら、出力時にその値をセットしておいてください。
「kanryo」の場合なら、スクリプトを書き直すか、現状の固定値を変数にしておいて可変にするなど。
この回答への補足あり
    • good
    • 0

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