簡體   English   中英

跨域jQuery .AJAX問題

[英]Cross Domain jQuery .AJAX problems

我正在嘗試使用jQuery的.AJAX函數向IPINFODB的API發送請求,以獲取訪問我們網站的用戶的地理位置。

問題是,據我所知,jQuery的.AJAX函數不允許跨域請求,並且依次返回任何內容。

以下代碼提醒您[空白]

$.ajax({
    type: "POST",
    url: "http://api.ipinfodb.com/v3/ip-city/ip_query.php",
    data: "key=***********&format=json&ip=<?php echo $_SERVER['REMOTE_ADDR']; ?>",
    success: function(r) {

        alert(r);

    }
});

我已經嘗試了.AJAX請求的所有參數變體,例如GET,JSON,等等等等,但還是一無所獲。 有人知道通過AJAX向此API發出請求的另一種方式嗎? 最好不要使用YQL。

這可以用AJAX完成。 您將需要使用JSONP來解決跨域問題。

這是代碼:

$.getJSON("http://api.ipinfodb.com/v3/ip-city/?key=API_KEY&format=json&callback=?" )
 .error (function  () {
    // error code
 }) 
 .success(function (result) { 
    // success code
    console.log(result); 
    console.log("your location is", result.latitude, result.longitude);
 });

您將需要用自己的API密鑰替換API_KEY

我最近為WordPress插件實現了。

這是我的AJAX調用的樣子:

jQuery.ajax({
type : "GET",
url : "action.php",
data : {    
    ipinfodb_api_key : "<?php echo $ipinfodb_api_key; ?>",
    ip : "<?php echo $_SERVER['REMOTE_ADDR']?>"},
        success : function(response) {
            jQuery("#<?php echo $widgetid; ?>").html(response);
    }
});

這是我在action.php中處理此信息的函數:

function processData($ipinfodb_api_key, $ip) {
$longitude = null;
$latitude = null;
$url = 'http://api.ipinfodb.com/v2/ip_query.php?key='.$ipinfodb_api_key.'&ip='.$ip.'&timezone=false';
$content = @file_get_contents($url);
if ($content != FALSE) {
    $xml = new SimpleXmlElement($content);
    if ($xml->Latitude) $latitude = $xml->Latitude;
    if ($xml->Longitude) $longitude = $xml->Longitude;
}
    // return latitude or longitude or do further processing
}

如果遠程服務器由於相同的原始策略限制而不支持JSONP,則不能直接從javascript調用它(除非您編寫自己的瀏覽器和不遵守此策略的javascript實現)。

要解決此限制,您可以在您的域上編寫一個服務器端腳本,該腳本將充當您的域和遠程域(api.ipinfodb.com)之間的橋梁,然后將AJAX請求發送到您自己的服務器端腳本。

試試這個網址:

http://api.ipinfodb.com/v3/ip-city/?key=<your_api_key>&format=json&callback=?

...並通過GET發送請求(將數據留空)

http://ipinfodb.com/ip_location_api_json.php

您可以在Web應用程序中編寫一個Web方法,以從服務器執行Web請求。 本質上,您將調用與另一個函數包裝在一起,然后可以調用函數,因為它的起源相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM