-3

フォームをアンカー付きの POST スタイルで送信することは可能ですか?

<form>
    <input name="foo" />
    <input name="bar" />

    <a href="#">Submit this form</a>
</form>

元の質問は、Martijnによるこの回答でも説明されています

メソッドとしてハイパーリンクを使用して値を渡すことは可能ですPOSTか?? 画像をクリックしたときに値を次のページに渡したい。

4

1 に答える 1

1

元の回答を以下に残しておきます。アンカーがポストコールを実行できない理由です。ただし、質問は言い換えられています。この回答はその質問に答えます。

アンカーを使用して送信することはできませんが、送信をトリガーするのはやや一般的な方法です。

$('a#myAnchor').click(function(){ $('#myForm').submit() })
/// Or an image, doesn't really matter for jQuery:
$('img#myImg').click(function(){ $('#myForm').submit() })
// Or native js:
document.getElementById('myImg').onclick = function(){ document.getElemetById('myForm').submit() });

送信をトリガーする要素がフォーム内にある場合:

$('element').click(function(){ $(this).closest('form').submit() });

いいえ。アンカーは GET です。なぜなら、アンカーは URL に送信するためです。これにより、URL は GET になり、POST は行われません。

POST は、ポスト形式で送信されるデータであり、サーバーが処理できる方法でエンコードされます (画像などにとって重要)

この他のトピックでは、この返信でGETとPOSTの違いについて説明しています

必要な場合、つまり本当に必要な場合は、jQuery を使用して次の行に沿った投稿を偽造できます。

// THIS IS AN UNTESTED DRAFT! Just to shown you a direction:
$('a').click(function(e){
    e.preventDefault();
    var scriptname = this.href.replace(/\??(.*)?/, ''); // remove everything after '?'
    var query     = this.href.replace(/(.*)\?/, ''); // remove everything before '?'
    $.post(scriptname, query);
});

ただし、本当に必要な場合を除き、これを行わないでください。これによりサーバーにajaxcallが送信されるため、ページは実際には変更されません。これは悪い習慣であるため、完了時にページを変更する方法を説明するつもりはありません。jQuery POST ドキュメントでこれを理解する必要があります。

于 2013-09-30T12:39:52.883 に答える