例:
<form>
<input type='submit'>
</form>
提出された結果は次のとおりです。
http://example.com/?
作り方:
http://example.com/
?
[これは問題の非常に単純な例です。実際のフォームには多くのフィールドがありますが、一部が無効になっている場合があります。すべてが無効になっている場合、末尾は?表示される]
私の場合、window.locationを使用していますが、それが最良の代替手段であるかどうかはわかりませんが、それを機能させることができる唯一のものです:
$('#myform').submit(function()
{
... if all parameters are empty
window.location = this.action;
return false;
});
私の実際の使用は、GETパラメーターを実際のURLパスに変換することだったので、完全なコードは次のとおりです。
$('#myform').submit(function()
{
var form = $(this),
paths = [];
// get paths
form.find('select').each(function()
{
var self = $(this),
value = self.val();
if (value)
paths[paths.length] = value;
// always disable to prevent edge cases
self.prop('disabled', true);
});
if (paths.length)
this.action += paths.join('/')+'/';
window.location = this.action;
return false;
});
Javascript を使用しないと、Javascript があるかどうかわかりません。問題を軽減する1つの方法は、次のように、反対側で無視できるジャンク値を保持するだけの隠し入力を作成することです。
<input type="hidden" name="foo" value="bar" />
そうすれば、空の GET リクエストが発生することはありません。
これは非常に古い質問であることは知っていますが、今日同じ問題に遭遇しました。私はこれに別の角度からアプローチしますが、クエリ文字列で値を渡すことはセキュリティと GDPR に適していないため、この時代ではおそらくフォームで GET ではなく POST を使用する必要があると考えています。さまざまな追跡スクリプトがクエリ文字列 (パラメーターに PII を含む) を取得し、サービスの条件を破るという多くの問題が発生しました。
投稿することで、常に「クリーン URL」を取得でき、フォーム送信スクリプトを変更する必要はありません。ただし、GET が必要な場合は、フォーム入力を受け取るものを変更する必要がある場合があります。
私は同様の答えを探していました。私がやったのは、クリックすると特定のページにリダイレクトするボタンを作成することでした。
例:
<button type="button" value="Play as guest!" title="Play as guest!" onclick="location.href='/play'">Play as guest!</button>
これはあなたの質問に対する「答え」ではありませんが、良い回避策になるかもしれません。これが役立つことを願っています。