Вызовите URL из JavaScript - PullRequest
14 голосов
/ 25 мая 2009

Есть ли способ позвонить по URL и получить ответ, используя JavaScript? Мне нужен эквивалент ASP.NET:

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

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

Ответы [ 4 ]

19 голосов
/ 25 мая 2009

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

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

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

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

5 голосов
/ 25 мая 2009
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);
2 голосов
/ 25 мая 2009

Если вам нужно проверять внешние страницы, вы не сможете обойтись без чисто 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, в вашем серверном скрипте может извлечь эту информацию и затем передать ее в ваше приложение javascript.

Подумав об этом сейчас, вероятно, могут быть прокси с поддержкой JSONP, если вы не сможете использовать опцию «Настройка моего собственного прокси».

2 голосов
/ 25 мая 2009

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

В jQuery:

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

В простом ванильном 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");
        }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...