Вызвать URL из javascript

Есть ли способ вызвать URL-адрес и получить ответ с помощью javascript? Мне нужен эквивалент ASP.NET:

WebRequest req = HttpWebRequest.Create("http://someurl.com");
WebResponse webResponse = req.GetResponse();

У меня есть внешний url, который содержит некоторую информацию, которая мне нужна, и я хочу называть этот url из javascript и анализировать ответ, чтобы определить, что делать в моем приложении.

Ответ 1

Вы можете сделать запрос AJAX, если URL-адрес находится в том же домене, например, в одном и том же другом приложении. Если это так, я бы, вероятно, использовал фреймворк вроде jQuery, скорее всего, метод get.

$.get('http://someurl.com',function(data,status) {
      ...parse the data...
},'html');

Если вы сталкиваетесь с проблемами с перекрестными доменами, то лучше всего создать серверное действие, которое проксирует запрос для вас. Сделайте свой запрос на свой сервер с помощью AJAX, запросите сервер и верните ответ с внешнего хоста.

Благодаря @nickf, для указания очевидной проблемы с моим оригинальным решением, если URL-адрес находится в другом домене.

Ответ 2

var req ;

// Browser compatibility check          
if (window.XMLHttpRequest) {
   req = new XMLHttpRequest();
    } else if (window.ActiveXObject) {

 try {
   req = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) {

   try {
     req = new ActiveXObject("Microsoft.XMLHTTP");
   } catch (e) {}
 }

}


var req = new XMLHttpRequest();
req.open("GET", "test.html",true);
req.onreadystatechange = function () {
    //document.getElementById('divTxt').innerHTML = "Contents : " + req.responseText;
}

req.send(null);

Ответ 3

Да, то, что вы просите, называется AJAX или XMLHttpRequest. Вы можете использовать библиотеку jQuery, чтобы упростить вызов (из-за проблем с совместимостью между браузерами) или написать собственный обработчик.

В jQuery:

$.GET('url.asp', {data: 'here'}, function(data){ /* what to do with the data returned */ })

В plain vanilla javaScript (от w3c):

var xmlhttp;
function loadXMLDoc(url)
{
    xmlhttp=null;
if (window.XMLHttpRequest)
  {// code for all new browsers
      xmlhttp=new XMLHttpRequest();
  }
else if (window.ActiveXObject)
  {// code for IE5 and IE6
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
if (xmlhttp!=null)
  {
      xmlhttp.onreadystatechange=state_Change;
      xmlhttp.open("GET",url,true);
      xmlhttp.send(null);
  }
else
  {
      alert("Your browser does not support XMLHTTP.");
  }
}

function state_Change()
{
    if (xmlhttp.readyState==4)
      {// 4 = "loaded"
          if (xmlhttp.status==200)
            {// 200 = OK
             //xmlhttp.data and shtuff
            // ...our code here...
        }
  else
        {
            alert("Problem retrieving data");
        }
  }
}

Ответ 4

Если вам нужно проверять внешние страницы, вы не сможете избавиться от чистого javascript-решения, так как любые запросы на внешние URL-адреса блокируются. Вы можете уйти от него с помощью JSONP, но это не сработает, если только страница, которую вы запрашиваете, обслуживает только JSON.

Вам нужно иметь прокси-сервер на своем собственном сервере, чтобы получить внешние ссылки для вас. Это на самом деле довольно просто с любым серверным языком.

<?php
$contents = file_get_contents($_GET['url']); // please do some sanitation here...
                                             // i'm just showing an example.
echo $contents;
?>

Если вам нужно проверить коды ответов на сервер (например, 404, 301 и т.д.), то использование библиотеки, такой как cURL на стороне сервера script, может получить эту информацию, а затем передать ее в ваше приложение javascript.

Думая об этом сейчас, возможно, для вас могут быть прокси-серверы с поддержкой JSONP, если опция "настройка моего собственного прокси" не будет жизнеспособной.