markhaskins — 2005-04-01T08:23:55-05:00 — #1
I have a form within an iframe that I want to use to refresh the location of the parent. I am using the form to set session variables that are used within the parent.
So in the iframe I have:
<form name="MyForm" method="POST"
action="<?php echo $_SERVER['PHP_SELF'] . '?' . SID; ?>">
And to submit this form I'm using this link:
Which refers to this script:
parent.location.href = "/search_results.php?";
(I think!) my problem is this; it works fine if the MyForm action, i.e. ="<?php echo $SERVER['PHPSELF'] . '?' . SID; ?>", completes before loadParent() is executed but if there is a slight delay in the time it takes for the server to do this, loadParent() is executed too early and the input from MyForm is lost.
What I need is to tell the script to wait until the MyForm action has completed, i.e. the page has refreshed, before running loadParent().
I'm sure there are loads of different ways of doing this. Ideally I would like something that detects the page refresh within the iframe (caused by the MyForm action) and not something that relies on a timed delay loop.
All ideas gratefully received.
jimfraser — 2005-04-01T13:28:26-05:00 — #2
The page that receives the form - once it's done processing can you write out:
Then you can get rid of loadParent from your submitform function.
markhaskins — 2005-04-02T02:26:54-05:00 — #3
Thanks, but I'm afraid it didn't work.
It just caused the parent page (search_results.php) to continually refresh itself. I.e. search_results.php is the page that receives the form, so the <body onload..> in it causes loadParent() to load search_results.php etc. etc.
I'm not sure if this approach is going to be the answer because (here comes the info I left out in my original post ) every page in my site is going to have an iframe containing the same form so wherever you are on the site you will be able to run the form from within the iframe and when you hit submit the parent location needs to be changed to search_results.php.
I think this means the relevant coding needs to remain within the iframe, unless maybe I add an "if statement" to your solution which is triggered by a variable passed from the form(?).
I guess I could solve the problem by having search_results.php come up in another iframe but I really want to minimise my use of frames as much as possible.
I'm thinking the solution may lie server side.
markhaskins — 2005-04-02T04:06:49-05:00 — #4
What I've done is to add a hidden input field called updateSearch in MyForm and set it's value to "1" onsubmit.
I then used php to dynamically write the loadParent() function like this:
if ($updateSearch == "1")
echo 'parent.location.href = "/search_results.php?";';
$updateSearch = "";
And included <body onload="loadParent();"></body> on the page containing MyForm.
So the parent location href is only changed when the MyForm page refreshes after submission.
I'm sure there are other (better?) solutions but this works so I can move on to my next headache!
Thanks jimfraser for your <body onload..> inspiration.