Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Javascript > POST data with XMLHttpRequest to CGI (Mozilla)

Reply
Thread Tools

POST data with XMLHttpRequest to CGI (Mozilla)

 
 
Jarson
Guest
Posts: n/a
 
      04-30-2005
My JavaScript is trying to POST data to a CGI script (Perl) using
XMLHttpRequest. My CGI server gets different data from IE than Mozilla
Firefox.

// For Mozilla, req = new XMLHttpRequest();
// For IE req = new ActiveXObject("Microsoft.XMLHTTP");
req.onreadystatechange = requestHandler ; // function to handle async
response
req.open('POST', myURL, true); // use POST
req.send('foo=11&bar=22') ;

A Perl CGI script prints the parameters passed to it.
$q = new CGI ;
foreach my $param ($q->param) {
print "$param: " . $q->param($param) . "\n" ;
}

The data received by the CGI script is inconsistent, depending if the client
is IE or Mozilla (Firefox)
Server result from IE client:
foo: 11
bar: 22
Server result from Mozilla Firefox client:
POSTDATA: foo=11&bar=22

It seems that the POST data IE sends is more correct than the Mozilla data.
Is there another way to send the data in Mozilla so the CGI script will give
the same results. I could easily adjust the CGI script, but I think the
problem is at the client.

Jarson (jarson from sygration, that's a dot com company if you need to send
an email)





 
Reply With Quote
 
 
 
 
Martin Honnen
Guest
Posts: n/a
 
      04-30-2005


Jarson wrote:

> My JavaScript is trying to POST data to a CGI script (Perl) using
> XMLHttpRequest. My CGI server gets different data from IE than Mozilla
> Firefox.
>
> // For Mozilla, req = new XMLHttpRequest();
> // For IE req = new ActiveXObject("Microsoft.XMLHTTP");
> req.onreadystatechange = requestHandler ; // function to handle async
> response
> req.open('POST', myURL, true); // use POST


First make the open call, then set the onreadystatechange handler and
then before you send the data set the HTTP request header e.g.
if (typeof req.setRequestHeader != 'undefined') {
req.setRequestHeader('Content-Type',
'application/x-www-form-urlencoded');
}

> req.send('foo=11&bar=22') ;


as that seems to be the content type of the data you want to post.


--

Martin Honnen
http://JavaScript.FAQTs.com/
 
Reply With Quote
 
 
 
 
Andy Hassall
Guest
Posts: n/a
 
      04-30-2005
On Sat, 30 Apr 2005 12:55:08 -0400, "Jarson" <(E-Mail Removed)> wrote:

>My JavaScript is trying to POST data to a CGI script (Perl) using
>XMLHttpRequest. My CGI server gets different data from IE than Mozilla
>Firefox.
>
>// For Mozilla, req = new XMLHttpRequest();
>// For IE req = new ActiveXObject("Microsoft.XMLHTTP");
> req.onreadystatechange = requestHandler ; // function to handle async
>response
> req.open('POST', myURL, true); // use POST
> req.send('foo=11&bar=22') ;
>
>A Perl CGI script prints the parameters passed to it.
> $q = new CGI ;
> foreach my $param ($q->param) {
> print "$param: " . $q->param($param) . "\n" ;
> }
>
>The data received by the CGI script is inconsistent, depending if the client
>is IE or Mozilla (Firefox)
>Server result from IE client:
> foo: 11
> bar: 22
>Server result from Mozilla Firefox client:
> POSTDATA: foo=11&bar=22
>
>It seems that the POST data IE sends is more correct than the Mozilla data.
>Is there another way to send the data in Mozilla so the CGI script will give
>the same results. I could easily adjust the CGI script, but I think the
>problem is at the client.


Aren't you missing setting the content-type for your request, that is, using:

req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;');

Perhaps one browser fills in the blanks whereas the other doesn't; either way
you ought to explicitly state it when POSTing data.

--
Andy Hassall / <(E-Mail Removed)> / <http://www.andyh.co.uk>
<http://www.andyhsoftware.co.uk/space> Space: disk usage analysis tool
 
Reply With Quote
 
Jarson
Guest
Posts: n/a
 
      04-30-2005
MAGIC!! Adding setRequestHeader to my JavaScript fixed it!

setRequestHeader was missing from my code and all of the documentation and
samples I've read!
Unscientific research:

Google for +XMLHttpRequest +send = 65,500 results
Google for +XMLHttpRequest +setRequestHeader = 516 results

Thanks Martin and Andy for that piece of valuable information!
Jarson

"Martin Honnen" <(E-Mail Removed)> wrote in message
news:4273c110$0$7534$(E-Mail Removed)-online.net...
>
>
> Jarson wrote:
>
>> My JavaScript is trying to POST data to a CGI script (Perl) using
>> XMLHttpRequest. My CGI server gets different data from IE than Mozilla
>> Firefox.
>>
>> // For Mozilla, req = new XMLHttpRequest();
>> // For IE req = new ActiveXObject("Microsoft.XMLHTTP");
>> req.onreadystatechange = requestHandler ; // function to handle
>> async response
>> req.open('POST', myURL, true); // use POST

>
> First make the open call, then set the onreadystatechange handler and then
> before you send the data set the HTTP request header e.g.
> if (typeof req.setRequestHeader != 'undefined') {
> req.setRequestHeader('Content-Type',
> 'application/x-www-form-urlencoded');
> }
>
>> req.send('foo=11&bar=22') ;

>
> as that seems to be the content type of the data you want to post.
>
>
> --
>
> Martin Honnen
> http://JavaScript.FAQTs.com/



 
Reply With Quote
 
Thomas 'PointedEars' Lahn
Guest
Posts: n/a
 
      05-10-2005
Martin Honnen wrote:

> Jarson wrote:
>> My JavaScript is trying to POST data to a CGI script (Perl) using
>> XMLHttpRequest. My CGI server gets different data from IE than Mozilla
>> Firefox.
>>
>> // For Mozilla, req = new XMLHttpRequest();
>> // For IE req = new ActiveXObject("Microsoft.XMLHTTP");
>> req.onreadystatechange = requestHandler ; // function to handle
>> async response
>> req.open('POST', myURL, true); // use POST

>
> First make the open call, then set the onreadystatechange handler [...]


Does not make sense to me. Why?


PointedEars
 
Reply With Quote
 
Lasse Reichstein Nielsen
Guest
Posts: n/a
 
      05-10-2005
Thomas 'PointedEars' Lahn <(E-Mail Removed)> writes:

> Martin Honnen wrote:


[XMLHttpRequest]
>> First make the open call, then set the onreadystatechange handler [...]

>
> Does not make sense to me. Why?


Why it doesn't make sense to you? Who knows

Anyway: The "open" call doesn't make the connection, it merely sets up
the request-object. The actual connection is created when the "send"
method is called, and the ready-state will not change until this
point. That means that it's safe to assign the handler after the call
to "open".

Some browsers will not honor event handlers set before the "open"
call, as if that call completely initializes the object.

/L
--
Lasse Reichstein Nielsen - http://www.velocityreviews.com/forums/(E-Mail Removed)
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: XMLHttpRequest: POST with Data Mike Winter ASP General 0 08-26-2012 01:59 PM
XMLHTTPRequest method POST appears not to be sent gp Javascript 1 03-06-2007 03:52 PM
XMLHttpRequest gets data to display in element but data gets appended not replaces previous! libsfan01 Javascript 5 12-20-2006 06:25 AM
POST a form with XmlHttpRequest Henri-Bastien Javascript 2 03-23-2005 03:00 PM
Post post post. Shel-hed Computer Support 2 11-08-2003 07:41 AM



Advertisments