'submit'イベントを発生させるときに、フォームから生成されたURLをキャッチできるかどうか疑問に思いました。
データからURLを生成できることはわかっています
フォームのアクションURLについては話していません
私は?field=value&other-input-name=value& ...
の部分を意味します
シナリオ:
PHPスクリプトにajaxリクエストを送信するフォームとJSスクリプトがあります。
私は通常これが好きです:
さて、通常(ajax以外のリクエストで) 'submit'を起動すると、URLはフォームによって作成され、フォームはそのURLを使用してデータをphpの対応物に送信します。
そのURLを「キャッチ」するにはどうすればよいですか?イベント自体から、それを保存していないように見える手がかりがないか、少なくとも私はそれを見つけることができませんでした。
どこかにあるに違いない!
簡単に言えば、できません。最善の方法は、フォームフィールドの値を自分で収集するか、jQueryの.serialize()関数を使用することです。この関数は、期待どおりにこれらの値を返します。
name=value&name2=value2
フォームのアクションURLを取得するという意味ですか?そのURLは次のように取得できます。
document.getElementById("form-id").action
JQueryを使用していて、ajaxを実行していると仮定すると、次のようになります。
var el = $('#form-id');
$.ajax({
type: el.attr('method'),
url: el.attr('action'),
data: el.serialize(),
context: this
}).done(callback);
すでに述べたように、ブラウザが生成するフォーム値を含む生成されたURLを取得することはできませんが、自分で作成するのは非常に簡単です。
JQueryを使用している場合は、serialize()を使用します。そうでない場合は、この投稿を参照してください javascriptによるすべてのフォーム値の取得 。
var targetForm = $('#myForm');
var urlWithParams = targetForm.attr('action') + "?" + targetForm.serialize();
alert(urlWithParams);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form action="/search/" id="myForm" method="get">
<input name="param1" type="hidden" value="1">
<input name="param2" type="hidden" value="some text">
</form>
これは、オブジェクトURLSearchParams
およびFormData
を使用すると可能で簡単です。
FormData
は、fetch
APIで使用するためのフォームのオブジェクト表現です。これは、次のような既存の要素から構築できます。
let form = document.forms[0];
let formData = new FormData(form);
次に、クエリ文字列を作成するために使用できるURLSearchParams
オブジェクトがあります。
let search = new URLSearchParams(formData);
これで、検索オブジェクトでtoString関数を呼び出すだけで済みます。
let queryString = search.toString();
完了!