How can I refresh a form page after the form submits to _blank?
Asked Answered
R

5

12

I have an HTML form which targets _blank. I would like the page that form is on to reload after submitting.

So here's some sample markup:

<form method="POST" action="result.php" target="_blank">
    <label for="name">Name:</label>
    <input type="text" name="name" />

    <label for="email">Email:</label>
    <input type="email" name="email" />

    <input type="submit" value="submit" />
</form>

So when you submit this form it will POST to result.php in a new window or tab. This leaves the form page as is. I want the form page to reload, or at least reset all fields.

I've tried <form onsubmit="location.reload()"... as well as onsubmit="window.location.reload()" but nothing changed.

Any suggestions?

(please no jquery)

Rorry answered 20/9, 2013 at 15:36 Comment(0)
D
26

Not sure why window.location.reload() doesn't work. I think it should. However, this does seem to work:

onsubmit="setTimeout(function () { window.location.reload(); }, 10)"
Diandrous answered 20/9, 2013 at 15:46 Comment(3)
perfect! not sure why I didn't think of that. I guess I've just been away from JS for too long. Thanks for the help!Rorry
But the time 10 is not that good since sometimes the submit is fast while sometimes slow.Commutual
I agree that the 10 is not so great (what if the server is having a bad day and takes longer than 10 ms to save the changes). I found this great nugget here: https://mcmap.net/q/142815/-how-do-i-capture-response-of-form-submit that uses ajaxMori
D
1

There are two ways to do this, one that you may not want to hear about.

FIRST:

In the form init tag, if you set action="" then the form will submit to the same page (to itself).

<form action="" method="post">

This allows you to add server-side code to the top of the page, like this (using PHP, for example):

<?php
    If (empty($_POST)===false) {
        //server side scripting to handle the submitted form
    }else{
?>
    //HTML to create/show the page with form for user input
<?php
    //Close the if statement
    }
?>

SECOND:

Use AJAX (javascript or jQuery) to "submit" the form, and then -- in the AJAX function's callback -- carry on with whatever changes you want to make to the page, including redirecting to a new page.

Deon answered 20/9, 2013 at 15:46 Comment(0)
H
1

The accepted answer did not produce the desired results for me.

Accepted answer:
onsubmit="setTimeout(function () { window.location.reload(); }, 10)"

Changing the accepted answer from onsubmit to onclick did fix my issue;

Worked for me:
onclick="setTimeout(function () { window.location.reload(); }, 3)"

There may be undesirable results, or this may not be preferred but it performs as desired for me.

Heteromerous answered 11/6, 2019 at 21:30 Comment(1)
It's not reliable to rely on timing. This can randomly fail based on server load, network speed etc.Critical
E
0

It should work if a callback is passed to the onsubmit event attribute. For example,

(Traditional anonymous function)

onsubmit="function() {location.reload()}"

or

(Arrow function)

onsubmit="() => location.reload()"
Edify answered 29/9, 2021 at 22:54 Comment(0)
S
-2
location.refresh(true);

will help

Serotonin answered 28/11, 2014 at 14:17 Comment(1)
Thanks. i know this was downvoted. but it worked for me. did precisely what i needed. i.e. Refreshed my partial after i submitted.Jihad

© 2022 - 2024 — McMap. All rights reserved.