Jump to content

ActiveXObject and redirect


biendong

Recommended Posts

Dear all,I am using ActiveXObject to read data from a URL. It is very good if URL don't automatically redirect to another URL. In contrast, I don't receive data. who can help me, please !I have a short code :var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");var strURL = "http://www.ibm.com/isv/news/pwbpads.xml";// this case is not good//strURL = "http://www.ibm.com/news/us/en/index.rss"; this case is goodxmlHttp.onreadystatechange=fetchData;xmlHttp.open("GET",strURL,true);xmlHttp.send(null);I have function fetcheData():function fetchData(){ if(xmlHttp.readyState == 4 && xmlHttp.status == 200) { //XU ly du lieu o day }}I always receive xmlHttp.readyState !=4 or xmlHttp.status !=200. I don't understand. Who can give me another solution ?.

Link to comment
Share on other sites

Thanks you for your advice. I tried but i still fail. When i changed:

xmlHttp.open("GET",strURL,false);

an error occured: ERROR(s) OCCURRED AT Create xmlHttp at line

"xmlHttp.open("GET",strURL,false);"

I am working a project, and i need solve this problem, please help me !

Link to comment
Share on other sites

Oh right sorry - I misinterpreted your problem I thought that the page with the script was the one being redirected not the target page. Hmm... what status is being returned?

Link to comment
Share on other sites

if (using Async = true) then xmlHttp.status=0 and xmlHttp.readyState=4else occured an error as I told aboveMy problem is: I want to use javascript to read a page (with a given URL, after receive page I read this page by DOM model, display information in my application (a gadget), but this page (with given a URL) automatically redirect to another page, so I encounter this error. If i open given URL by browser, i will receive redicted page and its URL. This prove that browser can receive redirected page from o given URL.My given URL is : http://www.ibm.com/isv/news/pwbpads.xml. This URL redirect to another URL, so i can't read pwbpads.xml directly because xmlHttp.status=0.

Link to comment
Share on other sites

Use the status to figure out what the server is telling you. If the status is 200 that means it found the file you're looking for. If the status is 404 then it couldn't find it. If it's 403 then it's forbidden. If it's 302 then the server is using the location header to tell you where to redirect to. You can find a list of HTTP status codes online to tell you what they mean. It's up to your application to check for the different status codes and respond appropriately.

Link to comment
Share on other sites

Use the status to figure out what the server is telling you. If the status is 200 that means it found the file you're looking for. If the status is 404 then it couldn't find it. If it's 403 then it's forbidden. If it's 302 then the server is using the location header to tell you where to redirect to. You can find a list of HTTP status codes online to tell you what they mean. It's up to your application to check for the different status codes and respond appropriately.
thanks, but when status =0, i don't know what did i receive from server.
Link to comment
Share on other sites

To testing my problem, please copy to test.html content follow:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><title>This page for testing</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><script type="text/javascript">var xmlhttpfunction loadXMLDoc(url){window.status = "";alert("Step 1");xmlhttp=nullalert("Step 2");// code for Mozilla, etc.if (window.XMLHttpRequest){	alert("XMLHttpRequest");  xmlhttp=new XMLHttpRequest()}// code for IEelse if (window.ActiveXObject){	alert("ActiveXObject");  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}if (xmlhttp!=null){	alert("Step 3");  xmlhttp.onreadystatechange=state_Change  alert("Step 4");  xmlhttp.open("GET",url,true)  window.status = "loading..."  alert("Step 5");  xmlhttp.send(null)  alert("Step 6");}else{  alert("Your browser does not support XMLHTTP.")}}function state_Change(){// if xmlhttp shows "loaded"alert("Call state_Change: "+ '\n' +"xmlhttp.readyState: "+xmlhttp.readyState+'\n'+"xmlhttp.status: "+xmlhttp.status);if(xmlhttp.readyState==4){	window.status = "success"  // if "OK"  if (xmlhttp.status==200)	{	// ...some code here...	}  else	{	window.status = "failed";	alert("Problem retrieving XML data")	}  }}</script></head><body style="background-color:#FFFFA0" onLoad=""> <h1>This page is used to test</h1> <BR>  <p>Connect to http://www.ibm.com/isv/news/pwbpads.xml:<button onClick="loadXMLDoc('http://www.ibm.com/isv/news/pwbpads.xml')">Heat me</button></p>  <p>Connect to http://www-304.ibm.com/jct09002c/isv/news/pwbpads.xml<button onClick="loadXMLDoc('http://www-304.ibm.com/jct09002c/isv/news/pwbpads.xml')">Heat me</button></p>  <p>http://www.ibm.com/isv/news/pwbpads.xml redirect to http://www-304.ibm.com/jct09002c/isv/news/pwbpads.xml</p></body></html>

I guest that new URL have another server (http://www-304.ibm.com) and old URL have another server (http://www.ibm.com) so, i can't receive status = 302 (3xx). who can help me please !

Link to comment
Share on other sites

As far as I'm aware, you can't use AJAX to fetch a resource that exists on a server that is different than the server that is hosting the current page.For example, if you are running this at http://somesite/somepage.html, you're not going to be able to use AJAX to do a GET/POST request for http://sometotallydifferentsite/somefile.xml.If you need to get a file that is on a different server, I believe you're going to have to set up a proxy page on your own server to which you send the GET/POST request that then, in turn, forwards the request on to the external site, receives the response and then, in turn, sends that response back to the original page.For example, if you are running this at http://somesite/somepage.html, the request should go off to http://somesite/proxy.php (or something) which would then handle the communication with http://sometotallydifferentsite/somefile.xml and then pass the response back to http://somesite/somepage.html

Link to comment
Share on other sites

When I heat the button in IE it asks me if I want to continue and I get a 200 status for both files. When I heat the button in Opera or Firefox it doesn't let the request go out in the first place like jesh described.
to justsomegauy, i also tested in both IE and firefox, in IE when i heat the first button, i recieved status=0; when i heat the seconds button, I received status=200.in firefox, i also encountered the same error (dialobox 1,2,3,4,5,6 appeared but dialogbox didn't appear).to jesh, let me research, thanks for advice very much ! i really want to solve this problem.
Link to comment
Share on other sites

  • 2 months later...

Hi jesh, i think you are right, but i haven't got server, my project is a gadget, that is a desktop application run in window vista (it is similar widget), it's engine is window sidebar, i use javascript language to write gadget. Gadget fetch data from server by ajax technology (by object ActiveObject("Microsoft.XMLHTTP"))when i fetch data in url = "http://www.ibm.com/isv/news/pwbpads.xml" i always receive status=0, and this url redirect to another url = http://www-304.ibm.com/jct09002c/isv/news/pwbpads.xml. If status = 302, i understand that server redirect to another url, but i always receive status=0, so i don't understand , please help me. I think jesh is right beacuse: "http://www-304.ibm.com/jct09002c/isv/news/pwbpads.xml" and http://www.ibm.com/isv/news/pwbpads.xml palce in another server.

Link to comment
Share on other sites

While I've never done anything with Vista "Gadget"s, I have built a few widgets that run under the Yahoo engine and the limitation of AJAX only being able to access the same domain as the calling page is not there. You should be able to make requests with your gadget to any URL that you can access over the internet. It actually looks like the request chain goes as follows:http://www.ibm.com/isv/news/pwbpads.xml --->http://www.ibm.com/partnerworld/isv/news/pwbpads.xml --->http://www.ibm.com/partnerworld/developer/news/pwbpads.xml --->http://www.developer.ibm.com/news/pwbpads.xml --->http://www-304.ibm.com/jct09002c/isv/news/pwbpads.xmlPerhaps that is more steps that you have coded for and your script is failing to get the response status correctly. Maybe you could build yourself a web page that accepts a request from your gadget and then that web page sends off the request to www.ibm.com and sends back the response from www-304.ibm.com just to make the javascript simpler.

Link to comment
Share on other sites

Thanhks jesh, i have some idea:- I suprise that how you can know the request chain above, you are super :), it the first time i know it.- I also implement some widget in yahoo engine (YE) and know that URL object of YE can fecht data from "http://www.ibm.com/isv/news/pwbpads.xml ", i wonder how URL can do like this and how i imitate it with ajax technology :)- Your solution is feasible but my requirement doesn't approve it- Do you know URL class in java, how i use it with ajax, because as i remember i read an example that used javascript and java togetherBest Regards.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...