2011-01-19 108 views
1

是否可以從用戶瀏覽器向另一個API發送網絡請求,然後處理髮回的結果?來自用戶瀏覽器的網絡請求

我嘗試下面的Ajax代碼,但它不工作,我想知道是否有可能與否,如果它的一個是的,我怎麼能實現它...

$(document).ready(function() { 

     $.ajax({ 
      type: "GET", 
      url: "http://api.ipinfodb.com/v2/ip_query.php?key=a9a2b0ec2c4724dd95286761777b09f1c8e82894de277a5b9d7175fa5275f2da&ip=&output=xml", 
      dataType: "xml", 
      success: function(xml) { 
       alert("sucess"); 
       $(xml).find('Ip').each(function() { 
        var ip = $(this).find('Ip').text(); 
        alert(ip); 

       }); 
      } 
     }); 

    }); 

回答

2

由於same origin policy restriction你是漂亮僅限於將AJAX請求發送到您自己的域名。 JSONP是一個常用的解決方法,但遠程站點需要支持它。另一個解決方法是在您的域中創建一個服務器端腳本,它將充當您的域和遠程域之間的橋樑,並且它將簡單地委託從javascript發送給它的AJAX請求。

+0

實際上如果u檢查URL U」會注意到ip =是空的,並且當一個請求使用ip = null時,它返回一個xml,其中包含用戶的ip,如果我從我的服務器發送請求,我將如何獲得用戶的ip ... – Rafay 2011-01-19 11:19:45

+0

@ 3nigma:如果您從服務器發送請求,則只需讓您的服務器獲取客戶端的IP地址並將其放入網址。我認爲這將做你想要的。 – Chris 2011-01-19 13:39:11

1

應該可以的,我也是這樣做的。

但是你必須在同一臺服務器上有頁面,你不能發送請求到另一臺服務器,在這種情況下,你將不得不使用服務器上的代理來中繼呼叫。

1

只是添加到已經說過的內容:如果您無法創建自己的JSONP代理,則可以使用YQL service爲您創建該代理。請注意,YQL會用你自己的元數據來包裝你的數據(除非你有辦法禁用那個...)。

順便說一下,您應該使用JSON輸出而不是API服務的XML輸出。 JSON是一種更輕量級的格式,因此更適合於Web。

下面是與您的API URL(輸出JSON這一次)和YQL一個全功能的例子:

var apiRequestUrl = "http://api.ipinfodb.com/v2/ip_query.php?key=a9a2b0ec2c4724dd95286761777b09f1c8e82894de277a5b9d7175fa5275f2da&ip=&output=json"; 
var yqlRequestUrl = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20json%20where%20url%20%3D%20%22"; 
yqlRequestUrl += encodeURIComponent(apiRequestUrl); 
yqlRequestUrl += "%22&format=json&callback=?"; 

$.getJSON(yqlRequestUrl, 
    function(jsonData) { 
     alert(jsonData.query.results.json.Ip); 
    }); 

最後,這篇文章可以來得心應手:http://www.wait-till-i.com/2010/01/10/loading-external-content-with-ajax-using-jquery-and-yql/

相關問題