このようなフォームがある場合、
<form action="/Car/Edit/17" id="myForm" method="post" name="myForm"> ... </form>
JavaScript / jQueryで別のビューにリダイレクトせずに送信するにはどうすればよいですか?
Stack Overflowからたくさんの回答を読みましたが、それらすべてがPOST関数によって返されたビューにリダイレクトします。
このようなフォームがある場合、
<form action="/Car/Edit/17" id="myForm" method="post" name="myForm"> ... </form>
JavaScript / jQueryで別のビューにリダイレクトせずに送信するにはどうすればよいですか?
Stack Overflowからたくさんの回答を読みましたが、それらすべてがPOST関数によって返されたビューにリダイレクトします。
回答:
あなたが望むものを達成するためには、以下のようにjQuery Ajaxを使用する必要があります:
$('#myForm').submit(function(e){
e.preventDefault();
$.ajax({
url: '/Car/Edit/17/',
type: 'post',
data:$('#myForm').serialize(),
success:function(){
// Whatever you want to do after the form is successfully submitted
}
});
});
これも試してください:
function SubForm(e){
e.preventDefault();
var url = $(this).closest('form').attr('action'),
data = $(this).closest('form').serialize();
$.ajax({
url: url,
type: 'post',
data: data,
success: function(){
// Whatever you want to do after the form is successfully submitted
}
});
}
これは完璧に機能しました。私はこの関数をHtml.ActionLink(...)
function SubForm (){
$.ajax({
url: '/Person/Edit/@Model.Id/',
type: 'post',
data: $('#myForm').serialize(),
success: function(){
alert("worked");
}
});
}
@Html.ActionLink("Add a Report", "Create", "Reports", new { carId = Model.Id }, new { onclick = "FUNCTION_WHICH_SUBMITES_FORM()" })
function SubForm (){ alert("1"); //e.preventDefault(); $.ajax({ url:'/Car/Edit/@Model.Id/', type:'post', data:$('#myForm').serialize(), success:function(){ alert("fasf"); } }); }
これは、フォームaction
を非表示にリダイレクトすることで実現でき<iframe>
ます。JavaScriptやその他の種類のスクリプトは必要ありません。
<iframe name="dummyframe" id="dummyframe" style="display: none;"></iframe>
<form action="submitscript.php" target="dummyframe">
<!-- Form body here -->
</form>
<input type='submit'...
て<input type='reset'
追加するonclick='document.forms["myForm"].submit();'>
iFrame
ページの下部に隠線を配置target
し、フォームに配置します。
<iframe name="hiddenFrame" width="0" height="0" border="0" style="display: none;"></iframe>
<form action="/Car/Edit/17" id="myForm" method="post" name="myForm" target="hiddenFrame"> ... </form>
早くて簡単。このtarget
属性はまだ広くサポートされています(HTML5でもサポートされています)が、HTML 4.01では推奨されていません。
ですから、将来を見据えてAjaxを使用する必要があります。
target
は完全に有効であるため、AJAXはオプションです。
現在のすべての回答はiQueryでjQueryまたはトリックを使用しているため、単純なJavaScriptのみでメソッドを追加しても害はないと考えました。
function formSubmit(event) {
var url = "/post/url/here";
var request = new XMLHttpRequest();
request.open('POST', url, true);
request.onload = function() { // request successful
// we can use server response to our request now
console.log(request.responseText);
};
request.onerror = function() {
// request failed
};
request.send(new FormData(event.target)); // create FormData from form that triggered event
event.preventDefault();
}
// and you can attach form submit event like this for example
function attachFormSubmitEvent(formId){
document.getElementById(formId).addEventListener("submit", formSubmit);
}
わかりません。魔法の方法はありませんので、説明しません。フォーム要素にアクション属性が設定されている場合は、リダイレクトされます。
リダイレクトしたくない場合は、アクションを設定せずに設定してください onsubmit="someFunction();"
あなたにはsomeFunction()
、あなたが(AJAXまたはしない)、あなたがやりたいとエンディングでは、追加return false;
のフォームを提出していないブラウザを教えて...
それを実現するには、Ajaxが必要です。このようなもの:
$(document).ready(function(){
$("#myform").on('submit', function(){
var name = $("#name").val();
var email = $("#email").val();
var password = $("#password").val();
var contact = $("#contact").val();
var dataString = 'name1=' + name + '&email1=' + email + '&password1=' + password + '&contact1=' + contact;
if(name=='' || email=='' || password=='' || contact=='')
{
alert("Please fill in all fields");
}
else
{
// Ajax code to submit form.
$.ajax({
type: "POST",
url: "ajaxsubmit.php",
data: dataString,
cache: false,
success: function(result){
alert(result);
}
});
}
return false;
});
});
データがmultipart/form-data
またはとして送信されることを意図していない場合、2020年時点のワンライナーソリューションapplication/x-www-form-urlencoded
:
<form onsubmit='return false'>
<!-- ... -->
</form>
action="..."
ページ切り替えが効果的に防止されますが、ネットワーク経由でデータが送信されることも防止されます。
ここで説明するように、送信ボタンをフォームの外に移動しても、目的の効果を得ることができます。
フォーム送信時のページの再読み込みとリダイレクトを防止するajax / jquery
このような:
<form id="getPatientsForm">
Enter URL for patient server
<br/><br/>
<input name="forwardToUrl" type="hidden" value="/WEB-INF/jsp/patient/patientList.jsp" />
<input name="patientRootUrl" size="100"></input>
<br/><br/>
</form>
<button onclick="javascript:postGetPatientsForm();">Connect to Server</button>
このスニペットを使用すると、フォームを送信してリダイレクトを回避できます。代わりに、success関数を引数として渡して、好きなことを行うことができます。
function submitForm(form, successFn){
if (form.getAttribute("id") != '' || form.getAttribute("id") != null){
var id = form.getAttribute("id");
} else {
console.log("Form id attribute was not set; the form cannot be serialized");
}
$.ajax({
type: form.method,
url: form.action,
data: $(id).serializeArray(),
dataType: "json",
success: successFn,
//error: errorFn(data)
});
}
そして、ただやる:
var formElement = document.getElementById("yourForm");
submitForm(formElement, function() {
console.log("Form submitted");
});
バックエンドを制御する場合は、のresponse.redirect
代わりになどを使用してくださいresponse.send
。
このためのカスタムHTMLページを作成するか、すでに持っているものにリダイレクトすることができます。
Express.jsの場合:
const handler = (req, res) => {
const { body } = req
handleResponse(body)
.then(data => {
console.log(data)
res.redirect('https://yoursite.com/ok.html')
})
.catch(err => {
console.log(err)
res.redirect('https://yoursite.com/err.html')
})
}
...
app.post('/endpoint', handler)