Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

XMLHttpRequest to get HTTP response from remote host

Why the following code Based on Mozilla example does not work? Tried with Firefox 3.5.7 & Chrome.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
</head>
<body>
</body>
  <script>
    var req = new XMLHttpRequest();
    req.open('GET', 'http://www.mozilla.org/', false); 
    req.send();
    if(req.status == 200) {
        alert(req.responseText);
    }
  </script>  
</html>

Please that the browser is pulling the html from local disk (file:///C:/Users/Maxim%20Veksler/Desktop/XMLHTTP.html)

On Firefox it gives the following error:

uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: file:///C:/Users/Maxim%20Veksler/Desktop/XMLHTTP.html :: <TOP_LEVEL> :: line 10" data: no]

What am I doing wrong? I want to submit a request to remote host and alert the result (later to added into a div).

like image 914
Maxim Veksler Avatar asked Jan 13 '10 21:01

Maxim Veksler


People also ask

Is XMLHttpRequest deprecated?

The specification for XMLHttpRequest states that synchronous usage is being removed from the standard because it's now deprecated.

What can I use instead of XMLHttpRequest?

The Fetch API is a modern alternative to XMLHttpRequest . The generic Headers, Request, and Response interfaces provide consistency while Promises permit easier chaining and async/await without callbacks.


2 Answers

Your browser is preventing cross-site scripting. You have to use a relative path, otherwise most browsers will simply return an error or an empty responseText.

The following Stack Overflow post is probably also related to your problem:

  • Empty responseText from XMLHttpRequest.
like image 176
Daniel Vassallo Avatar answered Sep 23 '22 06:09

Daniel Vassallo


I'm also assuming that you've opened your HTML test page directly in the browser judging by your reference to file:///.... For XMLHttpRequest calls, you need to serve the HTML from a server. Try something like xampp (http://www.apachefriends.org/en/xampp.html) to get a local server up and running and then run your test from http://localhost/XMLHTTP.html.

Note, this does not solve your same-origin problem, but this would allow the following code to work:

  <script>
    var req = new XMLHttpRequest();
    req.open('GET', '/myTestResponse.html', false); 
    req.send();
    if(req.status == 200) {
        alert(req.responseText);
    }
  </script>
like image 29
Ryan Joy Avatar answered Sep 19 '22 06:09

Ryan Joy