Well, as the "A" in Ajax is asynchronous, there's no real way to make it
wait. What you would normally do is use a callback:

    function createXHRObject( )
    {
        if (typeof XMLHttpRequest != "undefined")
        {
            return new XMLHttpRequest();
        }
        else if (typeof ActiveXObject != "undefined")
        {
            return new ActiveXObject("Microsoft.XMLHTTP");
        }
        else
        {
            throw new Error("XMLHttpRequest not supported");
        }
    }

    function sendAjaxRequest( websvcurl , params, callbackFn )
    {
        var xhrObject = createXHRObject();

        xhrObject.open("POST", websvcurl, true);
        xhrObject.onreadystatechange = function()
        {
            if (xhrObject.readyState == 4)
            {
                if( xhrObject.responseXML != null )
                {
                        callbackFn (xhrObject.responseXML);
                }
            }
        }

        xhrObject.setRequestHeader("Content-type",
"application/x-www-form-urlencoded");
        xhrObject.setRequestHeader("Content-length", params.length);
        xhrObject.setRequestHeader("Connection", "close");
        xhrObject.send(params);
    }


-----Original Message-----
From: Skip Evans [mailto:s...@bigskypenguin.com]
Sent: Saturday, April 04, 2009 5:30 PM
To: php-general@lists.php.net
Subject: AJAX with POST


Hey all,

At the risk of being told this is a PHP and not a JS list, but
also knowing the discussions on this list, to the benefit of
all I believe, very wildly, I'm posting this JS code snippet
for some advice.

As I posted earlier, my AJAX app that uses a GET to post to
the server (and get a response), fails on IE with larger data,
so I thought I'd take a shot at writing a POST function, but
so far I can get it to get the data back, but the problem is
by the time the data has come back the function has already
returned null back to the calling function. What I need this
function to do is wait for the data to come back and then send
it back to caller. Here's the function. Any advice would be
greatly appreciated. (The code to get the appropriate object
per browser has been omitted.)

http.open("POST", url, true);

//Send the proper header information along with the request
http.setRequestHeader("Content-type",
"application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", url.length);
http.setRequestHeader("Connection", "close");

http.send(url);

http.onreadystatechange = function() {//Call a function when
the state changes.
if(http.readyState == 4 && http.status == 200) {
        alert('['+http.responseText+']');
        return (http.responseText);
        }
}
--
====================================
Skip Evans
Big Sky Penguin, LLC
503 S Baldwin St, #1
Madison WI 53703
608.250.2720
http://bigskypenguin.com
------------------------------------
Those of you who believe in
telekinesis, raise my hand.
  -- Kurt Vonnegut


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to