467,868 Members | 1,291 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 467,868 developers. It's quick & easy.

Problem posting form to an IFrame

I have a rather complicated business application that uses Ajax. Part
of this form requires uploading documents, which I cannot do using
Ajax, so I post the form to an IFrame. This part works just fine.

The problem I have is that my server process returns some content to
the IFrame to complete form processing and to report any errors that
might have occured. Here's an example of what may be written back:

<html>
<head>
<script type="text/javascript">
function completed() {
window.parent.reportsCompleted();
}
</script>
<body onload="completed();">
<error>The document type .doc is not supported.</error>
</body>
</html>

Now this does properly call the reportsCompleted method of the parent
frame. The problem I am having is reading the contents of any <error>
tags if they exist:

function reportsCompleted() {
var frame = frames['upload_frame'];
if (frame.document.getElementsByTagName("error").leng th 0) { //
there were errors...
var message = "The following error(s) occured:";
for (var i = 0; i <
frame.document.getElementsByTagName("error").lengt h; i++) {
message += "\n" +
frame.document.getElementsByTagName("error")[i].nodeValue();
}
alert(message);
}
}

The problem is that I never get the contents of the error tags
displayed. I only see an alert window that says "The following
error(s) occured:".

What am I doing wrong?
Jun 27 '08 #1
  • viewed: 1552
Share:
14 Replies
On Apr 16, 3:30*pm, Tom Cole <tco...@gmail.comwrote:
I have a rather complicated business application that uses Ajax. Part
of this form requires uploading documents, which I cannot do using
Ajax, so I post the form to an IFrame. This part works just fine.

The problem I have is that my server process returns some content to
the IFrame to complete form processing and to report any errors that
might have occured. Here's an example of what may be written back:

<html>
<head>
<script type="text/javascript">
function completed() {
* * window.parent.reportsCompleted();}

</script>
<body onload="completed();">
<error>The document type .doc is not supported.</error>
</body>
</html>

Now this does properly call the reportsCompleted method of the parent
frame. The problem I am having is reading the contents of any <error>
tags if they exist:

function reportsCompleted() {
* * var frame = frames['upload_frame'];
* * if (frame.document.getElementsByTagName("error").leng th 0) { //
there were errors...
* * * * var message = "The following error(s) occured:";
* * * * for (var i = 0; i <
frame.document.getElementsByTagName("error").lengt h; i++) {
* * * * * * message += "\n" +
frame.document.getElementsByTagName("error")[i].nodeValue();
* * * * }
* * * * alert(message);
* * }

}

The problem is that I never get the contents of the error tags
displayed. I only see an alert window that says "The following
error(s) occured:".

What am I doing wrong?
why not use .innerHTML instead of your non existent .nodeValue()?
http://developer.mozilla.org/en/docs...ment.nodeValue
Jun 27 '08 #2
Tom Cole wrote:
[...]
The problem I have is that my server process returns some content to
the IFrame to complete form processing and to report any errors that
might have occured. Here's an example of what may be written back:

<html>
<head>
<script type="text/javascript">
function completed() {
window.parent.reportsCompleted();
}
</script>
<body onload="completed();">
<error>The document type .doc is not supported.</error>
</body>
</html>

[...] The problem I am having is reading the contents of any <error>
tags if they exist:

function reportsCompleted() {
var frame = frames['upload_frame'];
if (frame.document.getElementsByTagName("error").leng th 0) { //
there were errors...
Use instead:

if (frame)
{
// add feature test here
var c = frame.document.getElementsByTagName("error");

var len = c.length;

if (len 0)
{
var message = "The following error(s) occured:";
for (var i = 0; i <
.length; i++) {
var message = [];

for (var i = 0; i < len; i++)
{
message += "\n" +
frame.document.getElementsByTagName("error")[i].nodeValue();
message.push(c[i].nodeValue;
}
alert(message);
}

window.alert(message.join("\n"));
}
}
}
The problem is that I never get the contents of the error tags
displayed. I only see an alert window that says "The following
error(s) occured:".

What am I doing wrong?
Using non-HTML elements in a supposed-to-be HTML document,
and calling a property although it is not a method.

http://jibbering.com/faq/#FAQ4_43
http://validator.w3.org/
PointedEars
--
Anyone who slaps a 'this page is best viewed with Browser X' label on
a Web page appears to be yearning for the bad old days, before the Web,
when you had very little chance of reading a document written on another
computer, another word processor, or another network. -- Tim Berners-Lee
Jun 27 '08 #3
the <erroris not standard HTML elements then different browsers have
diffent behavior on unknow tag

for IE, you should define a namespace for custom elements
(xmlns:my="http://xxxx....", then use my:error, then use
document.getELementsByTagName("error"))
for Firefox, you need not to define namespace, but you have to write
document.getElementsByTagName("my:error");
It'd better to use standard HTML element (p, span) and innerHTML.

On Apr 17, 2:30*am, Tom Cole <tco...@gmail.comwrote:
I have a rather complicated business application that uses Ajax. Part
of this form requires uploading documents, which I cannot do using
Ajax, so I post the form to an IFrame. This part works just fine.

The problem I have is that my server process returns some content to
the IFrame to complete form processing and to report any errors that
might have occured. Here's an example of what may be written back:

<html>
<head>
<script type="text/javascript">
function completed() {
* * window.parent.reportsCompleted();}

</script>
<body onload="completed();">
<error>The document type .doc is not supported.</error>
</body>
</html>

Now this does properly call the reportsCompleted method of the parent
frame. The problem I am having is reading the contents of any <error>
tags if they exist:

function reportsCompleted() {
* * var frame = frames['upload_frame'];
* * if (frame.document.getElementsByTagName("error").leng th 0) { //
there were errors...
* * * * var message = "The following error(s) occured:";
* * * * for (var i = 0; i <
frame.document.getElementsByTagName("error").lengt h; i++) {
* * * * * * message += "\n" +
frame.document.getElementsByTagName("error")[i].nodeValue();
* * * * }
* * * * alert(message);
* * }

}

The problem is that I never get the contents of the error tags
displayed. I only see an alert window that says "The following
error(s) occured:".

What am I doing wrong?
Jun 27 '08 #4
On Apr 17, 8:20 am, gunnrosebutpeace wrote:
the <erroris not standard HTML elements then different
browsers have diffent behavior on unknow tag

for IE, you should define a namespace for custom elements
(xmlns:my="http://xxxx....", then use my:error, then use
document.getELementsByTagName("error"))
for Firefox, you need not to define namespace, but you have
to write document.getElementsByTagName("my:error");
It'd better to use standard HTML element (p, span) and
innerHTML.
Because different browsers have (and should be expected to have)
different behaviour when they encounter an unrecognised element in an
HTML document the specifics of the behaviour of just two of those
browsers is of very little use or relevance.

Because the response that includes the message is being generated it
would be possible to generate it in any form, and the simplest form
would be to take the character sequence that would otherwise appear in
the "error" element and appropriately escape it for inclusion in a
javascript string literal context and insert it as a string literal
argument to the - reportsCompleted - function call:-

// with double quotes and line terminators in the string (at minimum)
// replaces with their equivalent escape sequences.
window.parent.reportsCompleted(
"The document type .doc is not supported"
);

(with either no argument or an empty string as an argument in the
event that there was no error to report.)

Or assign it to a local variable (perhaps called 'error' for example,
but preferably something longer and less likely to coincide with a pre-
existing window property):-

// with double quotes and line terminators in the string (at minimum)
// replaces with their equivalent escape sequences.
var error = "The document type .doc is not supported."

- and have the reportsCompleted - function access it as:-

frames['upload_frame'].error

And in the (apparently likely( event that it is anticipated that there
be more than one error to report the string literals of the errors
could instead appear in an array literal.
Jun 27 '08 #5
Thomas 'PointedEars' Lahn wrote:
Tom Cole wrote:
[...]
> message += "\n" +
frame.document.getElementsByTagName("error")[i].nodeValue();

message.push(c[i].nodeValue;
message.push(c[i].nodeValue);

and it should work with Valid markup. Sorry.
PointedEars
--
Prototype.js was written by people who don't know javascript for people
who don't know javascript. People who don't know javascript are not
the best source of advice on designing systems that use javascript.
-- Richard Cornford, cljs, <f8*******************@news.demon.co.uk>
Jun 27 '08 #6
On Apr 17, 6:29*am, Thomas 'PointedEars' Lahn <PointedE...@web.de>
wrote:
Thomas 'PointedEars' Lahn wrote:
Tom Cole wrote:
[...]
* * * * * * message += "\n" +
frame.document.getElementsByTagName("error")[i].nodeValue();
* * * * message.push(c[i].nodeValue;

* * * * message.push(c[i].nodeValue);

and it should work with Valid markup. *Sorry.

PointedEars
--
Prototype.js was written by people who don't know javascript for people
who don't know javascript. People who don't know javascript are not
the best source of advice on designing systems that use javascript.
* -- Richard Cornford, cljs, <f806at$ail$1$8300d...@news.demon.co.uk>
Thank you for you assistance. I should have figured using an unknown
tag would cause unpredictable results. I've changed all the tags to
<spanelements and use the className to denote them as errors or not.
This seems to work just fine.

Jun 27 '08 #7
On 16 Apr, 20:30, Tom Cole <tco...@gmail.comwrote:
I have a rather complicated business application that uses Ajax. Part
of this form requires uploading documents, which I cannot do using
Ajax,
Why not?
Jun 27 '08 #8
On Apr 17, 10:56*am, Captain Paralytic <paul_laut...@yahoo.comwrote:
On 16 Apr, 20:30, Tom Cole <tco...@gmail.comwrote:I have a rather complicated business application that uses Ajax. Part
of this form requires uploading documents, which I cannot do using
Ajax,

Why not?
How would you perform a fileupload with Ajax?
Jun 27 '08 #9
Tom Cole wrote:
On Apr 17, 10:56 am, Captain Paralytic <paul_laut...@yahoo.comwrote:
>On 16 Apr, 20:30, Tom Cole <tco...@gmail.comwrote:I have a rather complicated business application that uses Ajax. Part
>>of this form requires uploading documents, which I cannot do using
Ajax,
Why not?

How would you perform a fileupload with Ajax?
Submit the form to a dynamically generated (hidden) iframe (the dynamical
part is optional), and read back the upload status through an XHR request.
BTDT.
PointedEars
--
Anyone who slaps a 'this page is best viewed with Browser X' label on
a Web page appears to be yearning for the bad old days, before the Web,
when you had very little chance of reading a document written on another
computer, another word processor, or another network. -- Tim Berners-Lee
Jun 27 '08 #10
On Apr 18, 1:30*pm, Thomas 'PointedEars' Lahn <PointedE...@web.de>
wrote:
Tom Cole wrote:
On Apr 17, 10:56 am, Captain Paralytic <paul_laut...@yahoo.comwrote:
On 16 Apr, 20:30, Tom Cole <tco...@gmail.comwrote:I have a rather complicated business application that uses Ajax. Part
of this form requires uploading documents, which I cannot do using
Ajax,
Why not?
How would you perform a fileupload with Ajax?

Submit the form to a dynamically generated (hidden) iframe (the dynamical
part is optional), and read back the upload status through an XHR request.
BTDT.

PointedEars
--
Anyone who slaps a 'this page is best viewed with Browser X' label on
a Web page appears to be yearning for the bad old days, before the Web,
when you had very little chance of reading a document written on another
computer, another word processor, or another network. -- Tim Berners-Lee
That's what I am doing, I guess I was incorrect in my previous
statement. I tend to use the terms "Ajax" and "XHR" as synonyms which
I guess they are not.
I guess I meant that I could not process document uploads using XHR.
Jun 27 '08 #11
On 18 Apr, 16:29, Tom Cole <tco...@gmail.comwrote:
On Apr 17, 10:56 am, Captain Paralytic <paul_laut...@yahoo.comwrote:
On 16 Apr, 20:30, Tom Cole <tco...@gmail.comwrote:I have a rather complicated business application that uses Ajax. Part
of this form requires uploading documents, which I cannot do using
Ajax,
Why not?

How would you perform a fileupload with Ajax?
Take a look at Google Mail. When you select a file for attaching to an
email, it gets uploaded immediately in the background, whilst you are
still composing the email.
Jun 27 '08 #12
On Apr 21, 6:58*am, Captain Paralytic <paul_laut...@yahoo.comwrote:
On 18 Apr, 16:29, Tom Cole <tco...@gmail.comwrote:
On Apr 17, 10:56 am, Captain Paralytic <paul_laut...@yahoo.comwrote:
On 16 Apr, 20:30, Tom Cole <tco...@gmail.comwrote:I have a rather complicated business application that uses Ajax. Part
of this form requires uploading documents, which I cannot do using
Ajax,
Why not?
How would you perform a fileupload with Ajax?

Take a look at Google Mail. When you select a file for attaching to an
email, it gets uploaded immediately in the background, whilst you are
still composing the email.
I've noticed that when I use this form submission to an IFrame
technique, in Internet Explorer there is a little progress bar that
appears in the bottom status bar of rhe browser as if something is
still processing, even after my server send the response and my IFrame
is populated. It doesn't appear to affect anything, but is strange.
Opera, FF, Safari does not exhibit this behaviour.
Jun 27 '08 #13
On 21 Apr, 14:00, Tom Cole <tco...@gmail.comwrote:
On Apr 21, 6:58 am, Captain Paralytic <paul_laut...@yahoo.comwrote:
On 18 Apr, 16:29, Tom Cole <tco...@gmail.comwrote:
On Apr 17, 10:56 am, Captain Paralytic <paul_laut...@yahoo.comwrote:
On 16 Apr, 20:30, Tom Cole <tco...@gmail.comwrote:I have a rather complicated business application that uses Ajax. Part
of this form requires uploading documents, which I cannot do using
Ajax,
Why not?
How would you perform a fileupload with Ajax?
Take a look at Google Mail. When you select a file for attaching to an
email, it gets uploaded immediately in the background, whilst you are
still composing the email.

I've noticed that when I use this form submission to an IFrame
technique, in Internet Explorer there is a little progress bar that
appears in the bottom status bar of rhe browser as if something is
still processing, even after my server send the response and my IFrame
is populated. It doesn't appear to affect anything, but is strange.
Opera, FF, Safari does not exhibit this behaviour.
Have you checked GM in IE to see if it does this too?
Jun 27 '08 #14
On Apr 21, 10:13*am, Captain Paralytic <paul_laut...@yahoo.comwrote:
On 21 Apr, 14:00, Tom Cole <tco...@gmail.comwrote:


On Apr 21, 6:58 am, Captain Paralytic <paul_laut...@yahoo.comwrote:
On 18 Apr, 16:29, Tom Cole <tco...@gmail.comwrote:
On Apr 17, 10:56 am, Captain Paralytic <paul_laut...@yahoo.comwrote:
On 16 Apr, 20:30, Tom Cole <tco...@gmail.comwrote:I have a rather complicated business application that uses Ajax. Part
of this form requires uploading documents, which I cannot do using
Ajax,
Why not?
How would you perform a fileupload with Ajax?
Take a look at Google Mail. When you select a file for attaching to an
email, it gets uploaded immediately in the background, whilst you are
still composing the email.
I've noticed that when I use this form submission to an IFrame
technique, in Internet Explorer there is a little progress bar that
appears in the bottom status bar of rhe browser as if something is
still processing, even after my server send the response and my IFrame
is populated. It doesn't appear to affect anything, but is strange.
Opera, FF, Safari does not exhibit this behaviour.

Have you checked GM in IE to see if it does this too?- Hide quoted text -

- Show quoted text -
It appears to behave the same. And BTW it's in Firefox, not IE that is
does this. As I mentioned everything is working just fine so I'll just
leave it alone for now.
Jun 27 '08 #15

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

4 posts views Thread by Federico Bari | last post: by
11 posts views Thread by Ed Blinn | last post: by
1 post views Thread by Ed Blinn | last post: by
9 posts views Thread by cakewalkr7 | last post: by
2 posts views Thread by mike | last post: by
1 post views Thread by gzannd | last post: by
1 post views Thread by XP | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.