2010-12-17 6 views
4

jQueryを使用して、IPアドレスで訪問者の場所を取得しています。これにはfreeGeoIPという素晴らしいサービスがあります。私がする必要があるのは、URLの末尾に「json」または「xml」を付けてIPアドレスを追加するだけで、必要なデータが返されます。jQuery JSONリクエストで「200 OK」という回答が得られますが、内容はありません

ブラウザでこれを手動で実行すると、動作します。小さな文書をダウンロードできます。ブラウザから$ .ajaxまたは$ .getJSONリクエストを行うと、 '200 OK'ヘッダーと下のメタデータで応答します。しかし、実際のデータは入っていません。何が起こっていますか?

編集:私はジャバスクリプト/ jQueryのコードを追加しました:

function openForm(event,ui){ 
    var _this = $(this); 
    //Get details on the user's IP 
    var myIP = $('#yourIP').attr('ip');alert(myIP); 
    var url = 'http://freegeoip.appspot.com/json/' + myIP; 
    $.ajax({ 
     url: url, 
     dataType: 'json', 
     contentType: 'text/json', 
     timeout: 10000, 
     complete: function(ip){ 
      alert('Success Ajax!'); 
      //URL returns status,ip,countrycode,countryname,regioncode,regionname,city,zipcode,latitude,longitude 
      $('#yourIP').text(ip.city + ", " + ip.countryname + " at " + ip.latitude + " latitude."); 
      $('#yourIP').attr({'city': ip.city,'country': ip.countryname}); 
     } 
    }); 

RESPONSE HEADERS 
Cache-Control no-cache 
Content-Type text/json 
Expires Fri, 01 Jan 1990 00:00:00 GMT 
Content-Encoding gzip 
Date Fri, 17 Dec 2010 15:26:48 GMT 
Server Google Frontend 
Content-Length 156 

REQUEST HEADERS 
Host freegeoip.appspot.com 
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 (.NET CLR 3.5.30729) 
Accept application/json, text/javascript, */*; q=0.01 
Accept-Language nl,en-us;q=0.7,en;q=0.3 
Accept-Encoding gzip,deflate 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive 115 
Connection keep-alive 
Content-Type text/json 
Referer http://www.freshbase.nl/permaculture/index.php 
Origin http://www.freshbase.nl 
+0

$ .ajax()関数が正しく設定されていない可能性があるので、実際にはコードのスニペットを指定する必要があります。 – Soviut

+0

なぜ、リクエストヘッダからremote_addrを取得できないのですか?私はコードを見るための概念の2番目のものです。 – jMyles

+0

もちろん、コードが登場です! – Wytze

答えて

10

これは、jQueryのAJAX機能で使用されるXMLHttpRequestオブジェクトのクロスドメイン要求の制限に反しているためです。一部のブラウザでは、そのときに空の200応答が返されます(混乱します)。

ドメイン間の問題を回避するためにJSONPをサポートするサービスを使用するか、同じドメイン上のサーバーサイドプロキシをローカル仲介として使用する必要があります。

+0

ありがとう、私には複雑な用語を使用していますが、私は検索用語としてJSONPを使用して詳細を調べます。 – Wytze

+0

検索できるJSONPの簡単な例は、jQueryを使用してTwitterまたはFlickr APIを使用していることです。 JSONPを使って作業する例がたくさんあります。あなたが消費しているサービスはJSONPをサポートしていなければなりません。 –

3

200は、ちょうど要求がエラーなしで正常に戻ったことを意味します。それは成功した要求でした。

リクエストが成功すると、レコードを返さないSQLクエリーのように、コンテンツは返されません。

+0

ありがとう、私は(ちょうど)知っていた。問題は、ブラウザのアドレスバーにURLを入力するだけで、私がJavascriptから要求したときにURLからデータを取得できないということです。それでは何が問題なの? – Wytze

+0

コードを投稿してください。あなたは何かをフィルタリングしようとしているかもしれません... –

2

クロスサイトAjaxリクエストを実行しようとしています。ブラウザはセキュリティのために危険な操作をブロックします。あなたの問題を解決するためにどのようにここを見て: Cross-site AJAX requests

1

、あなたは、クエリ文字列パラメータとして

var url = 'http://freegeoip.appspot.com/json/' + myIP + "&jsoncallback=?; 

$.getJSON(url, 
     function(data){ 

     }); 
+0

こんにちは、これは動作していないようです。このプロバイダはJSONP形式を提供していないようですが、JSONのみです。 – Wytze

1

をjsoncallbackを追加する必要があり、すべてのだから私は私自身の問題を解決!クロスサイトリクエスト、JSONPなどの詳細を理解するのに役立ついくつかの方法を教えてくれてありがとうございます。

これは本当に簡単です。これらのデータを持つページは、PHPで構成されています。 jQueryのは、ピックアップして上行動するためのページの適切なビットでこれらの変数を

$myIP = $_SERVER['REMOTE_ADDR']; 
$myGeoData = file_get_contents('http://freegeoip.appspot.com/json/' . $myIP); 

をして、エコー:だから私は、PHPに以下の2行を追加しました。

ウェブサービスがファイルまたはプレーンストリングの形式でデータを配信する場合、file_get_contentsはそのデータを取得して使用するために必要なものです。

あなたは、ページ全体をブラウザに送る前にPHPで入手することも、このコマンドを使用する独自のサーバ上のPHPスクリプトにAjaxリクエストを行うこともできます。おかげさまで再びありがとう!

関連する問題