2009-05-25 20 views
11

URLを呼び出してJavaScriptを使用して回答を得る方法はありますか? 私はASP.NETの同等のものを必要とする:
javascriptからURLを呼び出す

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

私は私が必要ないくつかの情報を保持している外部URLを持っていると私はJavaScriptからこのURLを呼び出し、中に何をすべきかを決定するために、応答を解析します私のアプリケーション。

+4

FYI:JavaScriptは同じドメインとしか話せません。 JSON呼び出しを他のユーザーに呼び出すことはできますが、プロキシを使用する方が効果的です。 – epascarello

答えて

15

URLが同じドメイン(たとえば、同じホストの異なるアプリケーション)にある場合、AJAXリクエストを行うことができます。もしそうなら、おそらくgetメソッドのようなjQueryのようなフレームワークを使うでしょう。

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

クロスドメインの問題が発生した場合は、リクエストを代理処理するサーバー側のアクションを作成することをお勧めします。サーバーにAJAXを使用してリクエストを行い、サーバーに要求して外部ホストからの応答を返します。

URLが別のドメインにある場合は、私の元の解決策で明白な問題を指摘するために@ nickfのおかげです。

+0

これは、ドメイン間のセキュリティポリシーのために機能しません。 – nickf

+4

驚くべきことに、1つの単語が投稿に含まれていないことがあります.... – tvanfosson

4
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); 
+1

古いIEのサポートを含むことについて忘れないでください。 –

+2

IEの古いバージョンをサポートしている訪問者があなたのサイトに来たときに大きな迷惑な警告を忘れることはありません。 http://iedeathmarch.org/ – yfeldblum

+0

はい、古いブラウザでコード(jqueryも)が使用されている場合は問題があります。 – NinethSense

2

はい、あなたが求めているのはAJAXまたはXMLHttpRequestです。 jQueryのようなライブラリを使用して(ブラウザ間の互換性の問題により)簡単に呼び出しを行うことも、独自のハンドラを記述することもできます。 jQueryので

:(W3Cから)プレーンバニラJavaScriptで

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

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"); 
     } 
    } 
} 
2

あなたが外部のページをチェックする必要がある場合は、あなたが離れて取得することができなくなります純粋なjavascriptソリューションです。外部URLへのリクエストはブロックされるためです。あなたはJSONPを使ってそれを取り除くことができますが、リクエストしているページだけがJSONを提供していない限り動作しません。

外部リンクを取得するには、自分のサーバーにプロキシが必要です。これは実際にはサーバーサイドの言語ではかなり簡単です。その情報を取得し、あなたのjavascriptのアプリにそれを渡すことができ、このようなサーバーサイドスクリプトでのcURLとしてライブラリを使用して、:(404、301、などなど)を使用すると、サーバーの応答コードをチェックするために必要な場合

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

「自分のプロキシを設定する」オプションが有効でない場合、JSONP対応のプロキシが使用されている可能性があります。

+0

異なるドメインまたは別のサブドメインにあるリソースを呼び出す場合は、何らかの回避策を使用する必要があります。 YahooのPHPでのプロキシファイルの例を参照してください。http://developer.yahoo.com/javascript/howto-proxy.html Snookには、クロスドメインで行われたAJAX呼び出しの回避策の概要があります。 http://snook.ca/archives/javascript/cross_domain_aj/を参照してください。 –

関連する問題