I am trying to submit a form and upon submitting the form the page should be redirected to a different URL. This is working fine, BUT the toast message appears right after the user hits SAVE button and then the page redirects to a different URL and the toast message vanishes.
However I want to redirect to display toast message after getting into the redirect URL and stay there for about 1 second. Here is my javascript code.
function submitForm(event) {
if ($('#expenseTypeAddForm').valid()) {
preloaderOption.On();
var url = $('#expenseTypeAddForm').attr('action');
ohrmAjaxHandler.url = url;
ohrmAjaxHandler.type = 'POST';
ohrmAjaxHandler.dataType = 'JSON';
ohrmAjaxHandler.data = $('#expenseTypeAddForm').serialize();
ohrmAjaxHandler.success = saveExpenseTypeSuccess;
ohrmAjaxHandler.call();
}
else {
console.log("Form is not valid");
}
};
function saveExpenseTypeSuccess(data) {
if (data['redirectUrl']) {
window.location = (data['redirectUrl']);
}
preloaderOption.Off();
toast.show(data['state'], data['responseMsg']);
}
You can use session of javascript
sessionStorage.setItem("showmsg", "1");
and check if session exists then display message on other page and then reset the session
if(sessionStorage.getItem("showmsg")=='1'){
alert('success');
sessionStorage.removeItem("showmsg");
}
Related
I'm trying to redirect to another page through JS(sending parameters)
I made the following code to that purpose, it does redirect and the requested page loads up 'ok'
window.location.replace(`http://10.0.30.11:3000/ProteseWEB/pages/detail/${path}?id=${param}`)
The problem is: When the requested page opens, it display an 404 not found on the network tab.
I don't understand why this is occuring, since the page I want is loaded 'perfectly'
The error on the network tab:
Edit(1)
#jlemley and #James Thank you for your answer!!!
Indeed the 404 request and the URL that I requested were different. So I changed the function a little bit.
Here's the code:
openPageDetail = function (path, params, method = 'POST') {
let iplocal = 'http://10.0.30.11:3000/ProteseWEB/pages/detalhe/'
const form = document.createElement('form');
form.method = method;
form.action = iplocal + path;
for (const key in params) {
if (params.hasOwnProperty(key)) {
const hiddenField = document.createElement('input');
hiddenField.type = 'hidden';
hiddenField.name = key;
hiddenField.value = params[key];
form.appendChild(hiddenField);
}
}
document.body.appendChild(form);
form.submit();
}
I tried to make it as a form submit, still, the error occurs
In addition, there's how I call for this function.
I have a DataTable and when the user double click a row, it opens up a detail page for the desired record.
$('.table').on('dblclick', function(e) {
if ((!(e.target.classList.contains('sorting_asc'))) && (!(e.target.classList.contains('sorting_desc')))) {
openPageDetail('contas-a-pagar', {
id: e.target.parentElement.id
});
}
});
Data sent from this
www.example.com/modules/liaise/index.php?form_id=xxx
In normal condition, after submit, the page redirects to
www.example.com/modules/liaise/index.php
and sends mail.
Wantedly, I placed the reCAPTCHA in the same file (index.php).
Google captcha :
require_once "recaptchalib.php";
// your secret key
$secret = "secret key";
// empty response
$response = null;
// check secret key
$reCaptcha = new ReCaptcha($secret);
// if submitted check response
if ($_POST["g-recaptcha-response"]) {
$response = $reCaptcha->verifyResponse(
$_SERVER["REMOTE_ADDR"],
$_POST["g-recaptcha-response"]
);
}
if ($response != null && $response->success) {
//send mail
} else {
echo '
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
<div id="html_element"></div>
<script>
var onloadCallback = function() {
grecaptcha.render("html_element", {
"sitekey" : "sitekey",
"callback" : correctCaptcha
});
};
var correctCaptcha = function(response) {
location.reload();
};
</script>';
}
Whenever I pass reCAPTCHA and page reloads, reCAPTCHA shows again.
I know data from previous page www.example.com/modules/liaise/index.php?form_id=xxx is still there by using
foreach($_POST as $key=>$value)
{
echo "$key=$value";
}
Is there any way by which I can resend data from previous url after reCAPTCHA is passed in the same page?
I am newbie in coding. Please be specific.
Thank you so much!
If your talking about re-sending your data as mail you can use something like this:
if (isset($_POST['form-input'])) {
// Send mail
}
and every time you reload the page and the Post data is not null or blank, it will run that code.
If you are wanting the reCAPTCHA to reload as success, I would say that's defeats the security of reCAPTCHA
Also I see that you have a typo esle should be else.
I have used the Asp.Net Identity framework in my app.There is a need, when the session expires give a prompt message, and then jump to the login page instead of directly jump to the login page.Prompt information using custom styles.
Because my app's left menus load the view with ajax,so I overried the AuthorizeAttribute.HandleUnauthorizedRequest methord to return a json.Now when users click left menus, it can work properly.But if users refresh the page by click F5,the page will still jump directly to the login page.
I have already overrided AuthorizeAttribute.HandleUnauthorizedRequest
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
var httpContext = filterContext.HttpContext;
string sintab = httpContext.Request["inTab"];
if (!string.IsNullOrEmpty(sintab) && bool.Parse(sintab))
{
var result = new JsonResult();
result.Data = new
{
Authorize = false,
Url = LOGIN_URL
};
result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
filterContext.Result =result;
return;
}
if (filterContext.Controller.GetType() != typeof(Controllers.HomeController) &&
!filterContext.ActionDescriptor.ActionName.Equals("Index", StringComparison.OrdinalIgnoreCase))
{
string returnUrl = "/" + filterContext.Controller.GetType().Name.Replace("Controller","") + "/Index" ;
returnUrl = httpContext.Server.UrlEncode(returnUrl);
httpContext.Response.Redirect("~/Account/Login?ReturnUrl="+returnUrl);
return;
}
base.HandleUnauthorizedRequest(filterContext);
}
The code of left menus' loadView js
$.get(url, null, function (html) {
html = html.replace(/#%/g, "\"").replace(/%#/g, "\"");
var json;
try {
json = eval("(" + html + ")");
} catch (e) {
}
if (json && !json.Authorize) {
// give an message
layer.alert("Session timeout, please re login.", function (index) {
window.location.href = json.Url + "?returnurl=" + encodeURI(hash);
});
}
else {
$("#content").empty().html(html);
_initModalButton();
$("#content").show();
}
}, 'html');
The page looks like this image
I want to know if there are some better ways to do this because there are a lot of other button need to check authorize status and show message before jump to the login page,and how to give the message when users refresh the page?
Thanks very much!
I think you're looking for are Global Ajax Events.
Please, check this, I think this make your job easier.
I am coding a page where after the user has entered the data in input fields, the data will be validated with an ajax request. After the data has been validated the page must be redirected to another page.
The below code is not working :
$scope.validateUser = function() {
username = $scope.username;
password = $scope.password;
if ( username === "nrvarun89") {
console.log(username+" "+password+" path is :"+window.location.href);
window.location.href = "http://localhost/b2c-webadmin/index/";
console.log(username+" "+password+" new path is :"+window.location);
}
};
If you are using anuglarjs make use of the $window service (best practice):
https://docs.angularjs.org/api/ng/service/$window
This should work:
$window.location.href
(See this for reference: https://docs.angularjs.org/guide/$location)
I am making a website that uses the Javascript Parse SDK and calling Parse.User.current() only works some of the times causing my redirect to kick users back to the login page even though Parse.User.logOut() has not been called. I am using the User class and not having them login through Facebook.
Function to see if there is an active session. If there is, the page loads, otherwise the user should be redirected to the main page:
function checkUser(){
var currentUser = Parse.User.current();
if (currentUser) {
//the page loads
} else {
//redirect user to the login page
window.location = 'login-url';
}
}
The above code is called in the <head> tag of each page:
<script>checkUser()</script>
When the user logs in, I check to make sure Parse.User.current() is not null and then redirect them to the main page. The first time they are sent to the main page, the checkUser() function does not find a user, and they are sent back to the login page where my redirect() function (below) sends them back to the main page because Parse.User.current() is not null when it checks it. The second time they are sent to the main page, Parse.User.current() has a user, so they stay on this page.
To a user logging in, the above is not a problem, since after logging in, they end up on the right page, but the real issue arises when the user tries to navigate to a different page using the tabs name. When one of these is clicked, checkUser() on the new page does not find a user so the user is pushed back to the login page, where redirect() does find a user and sends them back to the main page where checkUser() finds a user as well, so they end up back on the main page again.
I do not know what the issue is, but I think it has something to do with initially changing the pages programatically because if I log in and then type the url of a different page into my address bar instead of clicking on a tab, the checkUser() finds a user and then I can use the tabs to switch pages without a problem. Additionally, it all occasionally works perfectly when I am using Chrome (this problem always occurs with Firefox) and then I log out and log back in and the same issue comes back.
My login code:
$("#login").submit(function(event){
event.preventDefault();
var name=$("#username").val();
var password=$("#password").val();
Parse.User.logIn(name, password, {
success: function(user){
if(Parse.User.current()){
window.location="main-page";
} else{
alert("no user");
}
}, error: function(user, error){
alert("login error:" + error.message);
}
});
});
Redirect called on the login page:
function redirect(){
var currentUser = Parse.User.current();
if (currentUser) {
//a user is found, so they are taken to the main page
window.location = 'main-page';
} else {
//the user has to log in
}
}
I was able to solve my problem by storing the userid in a cookie instead of relying on Parse.User.current(). I essentially just followed the steps outlined in http://www.w3schools.com/js/js_cookies.asp and since the login function I was using has a callback with the object, I could easily get the user's id when they log in using user.id.
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires="+d.toUTCString();
document.cookie = cname + "=" + cvalue + "; " + expires;
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) == 0) return c.substring(name.length,c.length);
}
return "";
}
function checkCookie() {
var user = getCookie("userid");
if (user != "") {
//stay on page
} else {
window.location.href="login-url";
}
}
function removeCookie() {
setCookie("userid", "", -1); //setting the userid to an empty string
//and setting the expiration time to have passed
}
On the login and signup callback, I set the cookie and then redirect to the main page
setCookie('userid', user.id, 1);
window.location.href="main-page-url";
On all pages that require a user to be logged in, I check the cookie by calling checkCookie(); in the <head>. On the signin page, I also have a redirect so that if the user is signed in, they are redirected to the main page. This function is the same as checkCookie(), but I redirect when there is a user instead of when there is not one.
function checkCookie() {
var user = getCookie("userid");
if (user != "") {
window.location.href="main-page-url";
}
}
When the user logs out, I still call Parse.User.logOut(); but I also call removeCookie(); before redirecting to the log in screen.