PDA

View Full Version : Help! Sending Request, yet no readystatechange..


Toarluath
05-01-2009, 11:02 PM
So I have a problem that I can't seem to fix, no matter what I do.
The code below SHOULD create a 'slideObj' object and then use it to get some information from a php file called queryslides.php.

However, the code seems to only get to sending the request; it never RECIEVES any data back.
The function outlined in "this.request.onreadystatechange = this.infoReturn;" which is infoReturn() never gets called up. Everything before it works great, but it stops after the onreadystatechange part. :confused: :confused:

I have my code below, with comments inserted for ease of reading.

function slideObj() {
this.request = null; //get a request object
try {
this.request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
this.request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
this.request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
this.request = null;
}
}
}

if (this.request === null) {
alert("Error creating request object!");
}



function sendGetServer() {
this.request.open("GET", "queryslides.php", true);

//queryslides.php is a php file with only one active line
//<?php
//echo "1|r|d~3|s|f";
//?>

this.request.onreadystatechange = this.infoReturn;
this.request.send(null);
alert('Message Requested');
}


//HERE IS THE PROBLEM *****
//Every 'alert' is activated, except for those in the two functions below

function infoReturn() {
if (this.request.readyState == 4) {
/* Get the response from the server */
var info = this.request.responseText;
alert('Info recieved');
/* Format Data */
this.goOn(info);
}

}


//The next function works by itself, so this isn't really a problem
//
// Except for the alert line, you can just pretend the goOn() doesn't do anything.

function goOn(inf) {

alert('working?');

}

this.goOn = goOn;
this.infoReturn = infoReturn;
this.sendGetServer = sendGetServer;
}

var hey = new slideObj();
hey.sendGetServer();
alert('end');

What can I do? :(
I have a link to the page here: http://hiroshifukada.no-ip.biz/sense/TEST.html~ (Note: The linked file is not EXACTLY the same as the example I gave. I'll update the file to what I show here as soon as I can.)

Toarluath
05-02-2009, 12:49 AM
Also, when I removed the 'object-ness' of it-- the same code, but without the 'this.request's or the new object part. I just ran the code straight-out-- it worked okay.

How would making the code in an object make it suddenly not work?
How can I fix it?

Toarluath
05-02-2009, 03:05 AM
I've figured out one more thing:
infoReturn() IS being activated, however, I have isolated the if-statement as the problem.

function infoReturn() {
alert('This alert is being read, 4 times. 1 for every readyState change, I presume');
if (this.request.readyState == 4){
//HERE is where it won't work
}


I've set the if statement to (this.request.readyState == 4), (this.request.readyState), and (this.request.readyState != 4). NONE of these seem to work.
Please, WHY doesn't this if-statement WORK??! :confused::confused::confused:

oesxyl
05-02-2009, 05:11 PM
http://www.codingforums.com/showpost.php?p=811882&postcount=1

see 1.2:

http://www.codingforums.com/rules.htm

ask one of the moderators to remove one.

best regards

Toarluath
05-04-2009, 02:00 AM
Any ideas on my problem though?

A1ien51
05-04-2009, 06:06 AM
this.request.onreadystatechange = this.infoReturn;

needs to be

var that = this;
this.request.onreadystatechange = function(){that.infoReturn()};


Eric

Toarluath
05-05-2009, 03:17 AM
Wow... :eek:
Thank you so much! It finally works!:D

But still... WHY does it work?
Maybe it's just because I'm fairly new to AJAX, but I don't see why this new code works when the old one fails..

A1ien51
05-05-2009, 04:17 AM
Learn about closures and scope.

Eric