You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Harry Zhu <ha...@GreatLodge.COM> on 2002/08/09 20:26:06 UTC

Is it possible to change the browser's address/location URL without Redirect?

Looks like my explanation is too long or too bad.
The simple idea is in page step 1, after the

<form action=/step/2 method=post>...</form>

submitted, I want the browser show something
http://www.example.com/step/1/error, instead of
http://www.example.com/step/2,
if there is a need for user to correct the data submitted.

It might be accomplished by using one of the approaches outlined below, but
I was wondering if there's other way that can save the overhead of the
write/read or resend the data, and the re-process. Probably not much we can
do if the URL displayed in the browser's address/location bar depends only
on the action value of the form submitted, not based on the server response?

Harry



----- Original Message -----
From: "Harry Zhu" <ha...@greatlodge.com>
To: "mod_perl list" <mo...@apache.org>
Sent: Thursday, August 08, 2002 4:22 PM
Subject: Can I change the browser's address/location?


> Suppose I have a generic content handler to handle requst
> /step/1, /step/2, ..., /step/n
>
> <Location /step>
>       SetHandler perl-script
>       PerlHandler MyHandler
>
> </Location>
>
> #MyHandler.pm
> package MyHandler;
> sub handler {
>   my $r=shift;
>   my $step = substr($r->path_info(),1);
>
>   #do something before fetch the content
>
>   #fetch content: usually include a form that will assign action
> /step/($step+1)
>
> }
>
> So if everything goes well, the user will follow through from step 1, step
> 2, until fnish.
> Now if in the "#do something ..." part, something is wrong, it will
usually
> require user go back to the same step, for example, to fill the form
again.
> The way my old cgi script does is just generate the form with prefilled
> value plus some error message indicate what's wrong. It works ok but the
> browser location will show /step/($step+1) while it actually is
/step/$step.
> Now that I am working it on mod-perl I thought I should be able to do
> something about it. I briefly browsed the 2 mod-perl books (eagle,
> cookbook), and could not found a simple solution yet  (or I missed it?). I
> was think using one of the folowing might work:z
> 1) save the request data in a temp file and redirect or http-refresh to
> /step/$step?$session_id or /step/$step/error?$session_id
> Remember the content is dynamic and depend on the input form data, so
simple
> redirect may not work.
> Looks like Apache will not post the form data when redirect with Location?
>
> 2) print a short form with hidden data and assign action=/step/$step/error
> then submit right away (onload=form.submit()?)
>
> Does anybody have a simple solution, e.g. without redirect? Is it possible
> to change the URI showing in the browser's address/location bar?
>
> I would appreciated if somebody can pointer me to the right direction.
>
> Harry
>
>



Re: Is it possible to change the browser's address/location URL without Redirect?

Posted by Harry Zhu <ha...@GreatLodge.COM>.
Simple redirection does not do the same job, because the /step/1/error
page is not a simple error page - I would like it to reload the same form in
step 1 with the values filled and some message indicating what's to be
correct.

Looks like the network trip (redirect/refresh) can not be avoid. Then the
session mechanism maybe better for the speed since it sends less data.

Harry


----- Original Message -----
From: "Peter Bi" <mo...@att.net>
To: "Harry Zhu" <ha...@GreatLodge.COM>; <>
Sent: Friday, August 09, 2002 5:18 PM
Subject: Re: Is it possible to change the browser's address/location URL
without Redirect?


> It is the browser that controls the URL in the "Address" bar. So one has
to
> make another call to get the URL refreshed. If you are worry about the
> speed, you may
>
> 1) return an error code in case of error
> 2) in Apache's httpd.conf, config that specific error to display
> /step/1/error
>
> A simply redirection does the same job.
>
> Peter
>
> ----- Original Message -----
> From: "Harry Zhu" <ha...@GreatLodge.COM>
> To: <mo...@perl.apache.org>
> Sent: Friday, August 09, 2002 11:26 AM
> Subject: Is it possible to change the browser's address/location URL
without
> Redirect?
>
>
> > Looks like my explanation is too long or too bad.
> > The simple idea is in page step 1, after the
> >
> > <form action=/step/2 method=post>...</form>
> >
> > submitted, I want the browser show something
> > http://www.example.com/step/1/error, instead of
> > http://www.example.com/step/2,
> > if there is a need for user to correct the data submitted.
> >
> > It might be accomplished by using one of the approaches outlined below,
> but
> > I was wondering if there's other way that can save the overhead of the
> > write/read or resend the data, and the re-process. Probably not much we
> can
> > do if the URL displayed in the browser's address/location bar depends
only
> > on the action value of the form submitted, not based on the server
> response?
> >
> > Harry
> >
> >
> >
> > ----- Original Message -----
> > From: "Harry Zhu" <ha...@greatlodge.com>
> > To: "mod_perl list" <mo...@apache.org>
> > Sent: Thursday, August 08, 2002 4:22 PM
> > Subject: Can I change the browser's address/location?
> >
> >
> > > Suppose I have a generic content handler to handle requst
> > > /step/1, /step/2, ..., /step/n
> > >
> > > <Location /step>
> > >       SetHandler perl-script
> > >       PerlHandler MyHandler
> > >
> > > </Location>
> > >
> > > #MyHandler.pm
> > > package MyHandler;
> > > sub handler {
> > >   my $r=shift;
> > >   my $step = substr($r->path_info(),1);
> > >
> > >   #do something before fetch the content
> > >
> > >   #fetch content: usually include a form that will assign action
> > > /step/($step+1)
> > >
> > > }
> > >
> > > So if everything goes well, the user will follow through from step 1,
> step
> > > 2, until fnish.
> > > Now if in the "#do something ..." part, something is wrong, it will
> > usually
> > > require user go back to the same step, for example, to fill the form
> > again.
> > > The way my old cgi script does is just generate the form with
prefilled
> > > value plus some error message indicate what's wrong. It works ok but
the
> > > browser location will show /step/($step+1) while it actually is
> > /step/$step.
> > > Now that I am working it on mod-perl I thought I should be able to do
> > > something about it. I briefly browsed the 2 mod-perl books (eagle,
> > > cookbook), and could not found a simple solution yet  (or I missed
it?).
> I
> > > was think using one of the folowing might work:z
> > > 1) save the request data in a temp file and redirect or http-refresh
to
> > > /step/$step?$session_id or /step/$step/error?$session_id
> > > Remember the content is dynamic and depend on the input form data, so
> > simple
> > > redirect may not work.
> > > Looks like Apache will not post the form data when redirect with
> Location?
> > >
> > > 2) print a short form with hidden data and assign
> action=/step/$step/error
> > > then submit right away (onload=form.submit()?)
> > >
> > > Does anybody have a simple solution, e.g. without redirect? Is it
> possible
> > > to change the URI showing in the browser's address/location bar?
> > >
> > > I would appreciated if somebody can pointer me to the right direction.
> > >
> > > Harry
> > >
> > >
> >
> >
>



Re: Is it possible to change the browser's address/location URL without Redirect?

Posted by Peter Bi <mo...@att.net>.
It is the browser that controls the URL in the "Address" bar. So one has to
make another call to get the URL refreshed. If you are worry about the
speed, you may

1) return an error code in case of error
2) in Apache's httpd.conf, config that specific error to display
/step/1/error

A simply redirection does the same job.

Peter

----- Original Message -----
From: "Harry Zhu" <ha...@GreatLodge.COM>
To: <mo...@perl.apache.org>
Sent: Friday, August 09, 2002 11:26 AM
Subject: Is it possible to change the browser's address/location URL without
Redirect?


> Looks like my explanation is too long or too bad.
> The simple idea is in page step 1, after the
>
> <form action=/step/2 method=post>...</form>
>
> submitted, I want the browser show something
> http://www.example.com/step/1/error, instead of
> http://www.example.com/step/2,
> if there is a need for user to correct the data submitted.
>
> It might be accomplished by using one of the approaches outlined below,
but
> I was wondering if there's other way that can save the overhead of the
> write/read or resend the data, and the re-process. Probably not much we
can
> do if the URL displayed in the browser's address/location bar depends only
> on the action value of the form submitted, not based on the server
response?
>
> Harry
>
>
>
> ----- Original Message -----
> From: "Harry Zhu" <ha...@greatlodge.com>
> To: "mod_perl list" <mo...@apache.org>
> Sent: Thursday, August 08, 2002 4:22 PM
> Subject: Can I change the browser's address/location?
>
>
> > Suppose I have a generic content handler to handle requst
> > /step/1, /step/2, ..., /step/n
> >
> > <Location /step>
> >       SetHandler perl-script
> >       PerlHandler MyHandler
> >
> > </Location>
> >
> > #MyHandler.pm
> > package MyHandler;
> > sub handler {
> >   my $r=shift;
> >   my $step = substr($r->path_info(),1);
> >
> >   #do something before fetch the content
> >
> >   #fetch content: usually include a form that will assign action
> > /step/($step+1)
> >
> > }
> >
> > So if everything goes well, the user will follow through from step 1,
step
> > 2, until fnish.
> > Now if in the "#do something ..." part, something is wrong, it will
> usually
> > require user go back to the same step, for example, to fill the form
> again.
> > The way my old cgi script does is just generate the form with prefilled
> > value plus some error message indicate what's wrong. It works ok but the
> > browser location will show /step/($step+1) while it actually is
> /step/$step.
> > Now that I am working it on mod-perl I thought I should be able to do
> > something about it. I briefly browsed the 2 mod-perl books (eagle,
> > cookbook), and could not found a simple solution yet  (or I missed it?).
I
> > was think using one of the folowing might work:z
> > 1) save the request data in a temp file and redirect or http-refresh to
> > /step/$step?$session_id or /step/$step/error?$session_id
> > Remember the content is dynamic and depend on the input form data, so
> simple
> > redirect may not work.
> > Looks like Apache will not post the form data when redirect with
Location?
> >
> > 2) print a short form with hidden data and assign
action=/step/$step/error
> > then submit right away (onload=form.submit()?)
> >
> > Does anybody have a simple solution, e.g. without redirect? Is it
possible
> > to change the URI showing in the browser's address/location bar?
> >
> > I would appreciated if somebody can pointer me to the right direction.
> >
> > Harry
> >
> >
>
>