• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1207
  • Last Modified:

Alternative to Querystring in GetXmlHttpObject - large form values.

Hi
Am using ajax to save a form. A textarea field of the form is replaced by a WYSIWYG editor.

The following code seemed to work great, posting the contents of the textarea/editor to the 'ajax-content.asp' page, seamlessly updating the database using the URL variables.   Now found that if the  textarea/editor gets too long the code no longer works.  Presume this is connected to the length limit of querystrings posted via the URL .

Is there a way round this?
D
var xmlHttp
{
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
  {
  alert ("Your browser does not support AJAX!");
  return;
  } 
  
var url="ajax-content.asp";
 
var MM_recordId = Form1.MM_recordId.value;
var inpContent = oEdit1.getHTMLBody();
 
url=url+"?MM_recordId="+MM_recordId;
url=url+"&inpContent="+inpContent;
 
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("POST",url,true);
xmlHttp.send(inpContent=);
}

Open in new window

0
daimo1
Asked:
daimo1
  • 4
  • 4
  • 2
1 Solution
 
Michel PlungjanIT ExpertCommented:
Since you use post, you do not have a querystring
0
 
daimo1Author Commented:
Probably my misunderstanding. The variables are passed via the URL, which is the issue. Is there another way to pass the variables?
0
 
Michel PlungjanIT ExpertCommented:
I would try
1. post the actual form to a hidden frame or

2. Go get extjs or prototype.js
Then post the form using the tested ajax they use
0
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

 
ahoffmannCommented:
xmlHttp.open("POST",url,true);
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttp.send("a=1&b=2&c=3");

# where a, b and c are your variables and 1,2,3 the corresponding values (inpContent or whatever)
# don't forget to remove it from the URL
0
 
daimo1Author Commented:
Thanks
Tried your example and, in part, works. The length of the field isn't an issue anymore.  The only trouble is that all the spacing is lost between words, e.g 'Hello There'  turns into 'HelloThere'. when the xmlHttp is passed.
Any ideas?
0
 
ahoffmannCommented:
> .. spacing is lost between words
XMLHttpRequest URL-encodes the text, hence a space becomes either + or %20, if you don't get it on the server, then your server application does a wrong URL-decoding
0
 
daimo1Author Commented:
Maybe my issue is on the processing page 'ajax-content.asp'.

To retrieve the variable I use 'Request("inpContent")' which is getting the variable but obviously not decoding it.  Have tried 'Request.QueryString("inpContent")' but this doesn't work.  Having never used 'application/x-www-form-urlencoded' befoer how do I decode the URL?
0
 
ahoffmannCommented:
Request.QueryString() reads the query string (GET request, manly)
I don't know anything about ASP, but there should be a Request.Post() or similar function to retrieve the posted values.

You can use a proxy or better a browser plugin like FF's LiveHttpHeader to check what the browser realy sends.

> how do I decode the URL?
convert any string of the form %HH (3 characters, where H is [0-9a-f]) to its corresponding character, %20 is a space, %78 is x ...
0
 
daimo1Author Commented:
Thanks for the advice on LiveHttpHeader . Gave me some insite:

Noticed that when using the original code and attaching  â€˜inpContent’ to the URL  the spaces were passed as %20, e.g. ‘Hello%20there’

When using the amended code you suggested the spaces were not changed at all. Even though I have no idea why, the processing page then ignored the spaces.

With that in mind I’ve used REPLACE to change the spaces to ‘%20’ before processing:

var inpContent = inpContent.replace(/ /g, "%20")

Not sure it’s the best way of doing things but seems to have done the trick.

Thanks for your patience and guidance.
0
 
ahoffmannCommented:
> .. change the spaces to ‘%20’ before processing:
.. which then sends a space as %2520 (check with LiveHttpHeader)
this identifies that your server side does a URL-decoding and probably removes spaces before you get the data in your script
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

  • 4
  • 4
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now