Hello
I'm testing the XMLHttpRequest object in Firefox and IE. The code
below works well in IE and Firefox. It shows "1" when the string is a
number and "0" when not. The page aspxTest.aspx only write "0" or "1"
with a "response.write " method.
The problem that I have is when I try this example with Synchronous
mode. If I change the function sendNum with:
xmlhttp.open("G ET",url,false );
In IE works well (show "0" or "1") but in Firefox don't show anything.
I have put an alert in "end" function before the condition of
xmlhttp.readySt ate but anything is writed. What's is wrong?
Thanks a lot
<html>
<head>
<script>
var xmlhttp;
function sendNum ()
{
try
{
xmlhttp=new ActiveXObject(" Microsoft.XMLHT TP")
}
catch (e)
{
try
{
xmlhttp=new ActiveXObject(" Msxml2.XMLHTTP" )
}
catch (E)
{
xmlhttp=false
}
}
if (!xmlhttp && typeof XMLHttpRequest! ='undefined')
{
try
{
xmlhttp = new XMLHttpRequest( );
}
catch (e)
{
xmlhttp=false
}
}
xmlhttp = new XMLHttpRequest( );
var url = "http://localhost/Test/aspxTest.aspx?n um=" +
document.forms['f'].elements['num'].value;
xmlhttp.open("G ET",url,true) ;
xmlhttp.onready statechange = end;
xmlhttp.setRequ estHeader('Acce pt','message/x-jl-formresult')
xmlhttp.send(nu ll);
}
function end ()
{
//alert("end function");
if (xmlhttp.readyS tate == 4)
{
alert(xmlhttp.r esponseText);
}
}
</script>
</head>
<body>
<form id="f">
Number: <input type="text" width="100px" id="num">
<input type="button" value="is a number" onclick="sendNu m()">
</form>
</body>
</html> 9 17996
David wrote: I'm testing the XMLHttpRequest object in Firefox and IE. The code below works well in IE and Firefox. It shows "1" when the string is a number and "0" when not. The page aspxTest.aspx only write "0" or "1" with a "response.write " method. The problem that I have is when I try this example with Synchronous mode. If I change the function sendNum with:
xmlhttp.open("G ET",url,false );
You shouldn't use the onreadystatecha nge event handler if you are using
a synchronous request, instead then you should do e.g.
xmlhttp = new XMLHttpRequest( );
var url = "http://localhost/Test/aspxTest.aspx?n um=" +
document.forms['f'].elements['num'].value;
xmlhttp.open("G ET",url,true) ;
xmlhttp.setRequ estHeader('Acce pt','message/x-jl-formresult')
xmlhttp.send(nu ll);
if (xmlhttp.status == 200) {
// use xmlhttp.respons eText or responseXML here
}
else {
// handle different response status here
}
that is simply place your code consuming the response after send(null),
as that method blocks.
But usually on the web you shouldn't use synchronous mode at all as it
blocks the browser and the user interface. For testing it might be fine
to start with synchronous requests but as you already know about
asynchronous requests and onreadystatecha nge simply use that.
--
Martin Honnen http://JavaScript.FAQTs.com/
Martin Honnen wrote: But usually on the web you shouldn't use synchronous mode at all as it blocks the browser and the user interface. For testing it might be fine to start with synchronous requests but as you already know about asynchronous requests and onreadystatecha nge simply use that.
I did not know that XMLHttpRequest had a synchronous mode. Very interesting.
Indeed I think, synchronous mode has some advantages because JS's event
driven approach does not lend itself well to some problems. Synchronous
is fine, as long as you can impose a timeout. Can you do this with
XMLHttpRequest?
Cheers
Daniel Kabs
Germany
Daniel Kabs wrote: Indeed I think, synchronous mode has some advantages because JS's event driven approach does not lend itself well to some problems. Synchronous is fine, as long as you can impose a timeout. Can you do this with XMLHttpRequest?
As script in current browsers like Mozilla runs in the user interface
thread a synchronous request means that the user interface is blocked
while the request is being performed and while the response is being
received.
XMLHttpRequest in Mozilla and in Opera does not have a method to set
timeouts, neither has Msxml2.XMLHTTP used client side in IE.
The Msxml2.ServerXM LHTTP object to be used on the server (e.g. in ASP
pages) has a method to set timeouts:
<http://msdn.microsoft. com/library/default.asp?url =/library/en-us/xmlsdk/html/xmobjXMLDOMServ erXMLHTTP.asp>
<http://msdn.microsoft. com/library/default.asp?url =/library/en-us/xmlsdk/html/xmmthsetTimeout sMethod.asp>
--
Martin Honnen http://JavaScript.FAQTs.com/
Hello Martin,
this thread is close to expire on my news server. How can you answer a
posting to a more than two months old thread in just a couple of
minutes? :-)
Martin Honnen wrote: As script in current browsers like Mozilla runs in the user interface thread a synchronous request means that the user interface is blocked while the request is being performed and while the response is being received. XMLHttpRequest in Mozilla and in Opera does not have a method to set timeouts, neither has Msxml2.XMLHTTP used client side in IE.
Thanks for pointing that out. So one has to *rely* on the fact, that the
server's response is swift. Not nice, but the alternative is an
asynchronous request, which is also not without ramifications.
Cheers
Daniel Kabs
Germany
On Fri, 29 Apr 2005 16:02:31 +0200, Daniel Kabs <da*********@gm x.de>
wrote: Hello Martin,
this thread is close to expire on my news server. How can you answer a posting to a more than two months old thread in just a couple of minutes? :-)
Martin Honnen wrote: As script in current browsers like Mozilla runs in the user interface thread a synchronous request means that the user interface is blocked while the request is being performed and while the response is being received. XMLHttpRequest in Mozilla and in Opera does not have a method to set timeouts, neither has Msxml2.XMLHTTP used client side in IE.
Thanks for pointing that out. So one has to *rely* on the fact, that the server's response is swift. Not nice, but the alternative is an asynchronous request, which is also not without ramifications.
No, always use async, sync is very bad on anything with a UI.
Jim.
Hello Jim,
I came across your pages while searching for help on some javascript
problems and I just wanted to say that I like your jibbering.com website.
Jim Ley wrote: Thanks for pointing that out. So one has to *rely* on the fact, that the server's response is swift. Not nice, but the alternative is an asynchronou s request, which is also not without ramifications.
No, always use async, sync is very bad on anything with a UI.
I've read that on your page, too. But asynchronous programming can be
awkward. Imagine you have several object, one object calls a method of
another object and so on. The last method invoked in this "cascade" is
supposed to load an image and return the image object. Now this can not
be accomplished in JS because the image is going to be loaded in an
async way and the method returns immediately. All the functions have to
return, the stack unwinds and the status is lost, if it is not saved
in e.g. callbacks using closures. And every method in this "cascade" has
to support callbacks, just because the last function is async. See the
sequence diagram in [2].
A solution could be to wrap the async functions with a "Synchronou s
Wrapper Facade in Javascript" (if that is possible in JS, but I doubt
it). Please have a look at my corresponding question in [2].
Cheers
Daniel Kabs
Germany
--
References:
1 <42************ ***********@new sread4.arcor-online.net>
2 <42************ ***********@new sread4.arcor-online.net>
On Mon, 02 May 2005 12:44:36 +0200, Daniel Kabs <da*********@gm x.de>
wrote: No, always use async, sync is very bad on anything with a UI.
I've read that on your page, too. But asynchronous programming can be awkward.
No more awkward than all the rest of javascript/html which relies on
it, it's all event based, I can't see how if you can cope with that
you'll have any more of a problem with this?
It's not awkward, it's just a different way of programming, and as you
have to use it for the rest, I fail to see the problem. The "load an
object, which loads an object, which loads an object which returns an
image" is simply not a pattern you should be using in webpages, I
don't think it's useful to try and create hacks and workarounds to fit
that pattern, just pick a more appropriate one.
Sync simply violates any user interface rules that the interface
cannot lock up. The big problem is that people test locally, or with
fast, reliable connections to their server, whereas the users will be
a long way away on unreliable connections, and they'll get very
different behavour.
Then there's the number of complete lock-up bugs when there are
multiple sync requests going on, it's simply not appropriate.
Jim
Hello!
Jim Ley wrote: It's not awkward, it's just a different way of programming, and as you have to use it for the rest, I fail to see the problem. The "load an object, which loads an object, which loads an object which returns an image" is simply not a pattern you should be using in webpages, I don't think it's useful to try and create hacks and workarounds to fit that pattern, just pick a more appropriate one.
I'm sorry if you received the impression that I would implement "load"
requests by recursive object calls. That's not what I meant when I wrote
"one object calls another". And of course I do not want the UA/UI to
freeze. Maybe I was too unprecise.
The problem is not asynchronous programming per se. I've done that
before. The problem is that Javascript provides no means of waiting for
results, i.e. it's a completely async environment.
Thus (as I wrote before) if you have a method calling another method
calling another method doing something async, even the first
method/function has to provide for this async behaviour and pass a
closure as parameter to continue after the async call has finished and
triggers the event handler. I find this "awkward" because this prevents
to "abstract away" deeper levels of functionality as even the highest
abstraction level has to know about the async type of the underlying
levels. Or am I completely mistaken?
Cheers
Daniel
Hello Richard,
thanks for sharing your ideas and the detailed description how a
completely event-driven system works.
Richard Cornford wrote: Awkwardness is going to be largely a matter of perception. Procedural code doesn't lend itself to asynchronous operation but OO code shouldn't be such a problem. In OO the 'state' should be a quality of the objects not the stack.
Yes, it's the feeling that makes one prefer a certain design. I would
not rule out procedural code for async operations. E.g. I imaging that
implementing a network protocol using a statemachine is an appropriate
approach. In OO code you would break up the case/switch statements and
"spread them around", delegate it to objects and their methods. Now the
objects keep their own state (and implement a statemachine). Is this
advantageous, I don't know.
Maybe it's just because I have a background in procedural programming.
So designing a completely event-driven system, where objects interact
sending async messages seems counter-intuitive because it lacks a main
flow of control.
I found the following example helpful:
In procedural programming you often have the control flow in a main
routine that calls other components only to do lower-level tasks. The
main routine can be long and complex but it gives the whole thing a
logical structure.
In an event-driven program you don't have that control flow in the main
routine. The main routine sends of messages and mainly consists of event
handlers. Not the main routine but the objects are now "in charge" and
not only sequentially, but also concurrently as messages and events may
happen any time. So the logical structure of the program is scattered
around and interactions among objects may be hard to understand.
Additionally, the use of ordinary linguistic constructs like loops,
stack allocated variables, ... is limited as these disappear accross
callbacks/messages.
Well, maybe one just has to get used to it :-) I'd like to see a real
good example of an event-driven system with object interaction through
messages implemented using Javascript. See the sequence diagram in [2].
I see no sequence diagram.
Because there is none :-) I referred to the wrong footnote. See here for
the sequence diagramm instead:
<42************ ***********@new sread4.arcor-online.net> http://groups.google.de/group/de.com...dba787abae68d4
Cheers
Daniel This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: knocte |
last post by:
Hello.
I have always thought that the eval() function was very flexible and
useful. If I use it, I can define functions at runtime!!
However, I have found a case where eval() does not work properly. It
works, for example, when invoking functions (alert('hello')), but not
for defining functions.
The case occurs when retrieving the javascript code with
|
by: Greg |
last post by:
Hi,
I've designed a bookmark in Ajax / PHP that I will put soon on
sourceforge.net.
But I've got an very tricky bug.
I try it on some computers with Internet Explorer/Windows, Firefox
1.07/Linux, Firefox 1.5/Linux, Firefox 1.5/Windows and Firefox 1.5/Mac,
Safari/Mac.
It works perfectly on a lot of configurations but, on some PC with
Firefox 1.5/Windows (not all), the Javascript code with XmlHttpRequest
|
by: Spasmoid |
last post by:
I have the following code running in FireFox 1.5 (a remote XUL
application):
var req = new XMLHttpRequest();
// execution will block until request is
completed
// third param set to false makes request
synchronous
req.open(strMethod, uriTarget, false);
if(strMethod == "POST") {
|
by: petermichaux |
last post by:
Hi,
I thought it is about time I tried writing some JavaScript with
XMLHttpRequest instead of just using the Yahoo! UI library. The simple
page below works in both Safari and Opera but I don't see the alert in
Firefox. Looking in Firefox's firebug plugin, I see that the request is
successfully sent and the correct response is received. Any ideas what
is wrong?
Thank you,
|
by: TLaufenberg |
last post by:
I'm new to Javascript programming and I've run into a bit of a snag
with making an XMLHttpRequest in the Safari browser. Actually, the
request doesn't work in Firefox either but only when I use a Mac
computer. IE and FireFox on a Windows based system works just fine. The
problem I am having is that the XMLHttpRequest doesn't open the site
that I've programmed into it. When I check the readyState it only
returns 0 and never goes through the...
| |
by: perrog |
last post by:
Hi!
What is the expected behaviour when you send an XmlHttpRequest just
before the page is about to unload? I'm sending a XmlHttpRequest on an
onClick event, and I can inspect that the request is sent and
responded in the network traffic, but my onReadyStateChange handler is
notified with an error.
It took me some time to deduce what the real problem was, and I think
my browser begins to tear down the XmlHttpRequest when the page is
|
by: HugeBob |
last post by:
Hi All,
I'm having a problem with a web app I'm writing. I have a form for
which I'm going to validate one of the fields. I use AJAX to retrieve
XML containing a list of valid entries. My app works under IE, oddly
enough. But, under Firefox, it seems that the
XMLHttpRequest.onreadystatechange method is not being called. The
code follows. I'm using synchronous mode because I'm thinking that I
want that global variable...
|
by: HugeBob |
last post by:
Hi All,
I've got a question about Asynchronous vs Synchronous mode with the
XMLHttpRequest object. What are the ramifications of using one mode
vs the other? If the script uses Asynchronous mode, it sounds as if a
thread retrieves the data from the supplied URL and the JS function
that called the open() and send() methods continues on. Where as
using Synchronous mode the method that called open() and send() waits
until the data from...
|
by: jackchang1 |
last post by:
Hi, group
I have a problem with IE when using XMLHttpRequest object in
asynchronous mode. I have a page, and when it is closed, the onunload
event handler of the page will create an XMLHttpRequest object and
post some data back to the server. If I set it to asynchronous, next
time when I try to launch the same page, the IE browser hangs there.
But after I set it to synchronous, everything is fine. I didn't know
why. Can anyone give me...
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look !
Part I. Meaning of...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it.
First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
| |
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth.
The Art of Business Website Design
Your website is...
|
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules.
He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms.
Adolph will...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...
| |