2017-02-22 85 views
0

目前我正在試圖通過市IDOpenWeatherMap API沒有響應

openweathermap.org 

獲取數據。但我無法得到任何東西。我想我可能做錯了什麼,因爲我只是一個初學者,並且第一次嘗試Ajax。

HTML:

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Your Weather</title> 
     <meta charset="utf-8"> 
     <link rel="stylesheet" href=""> 
    </head> 
    <body> 
     <div> 
     <h1>The Weather</h1> 
      <div> 
       <p> 
        <span id="show-weather"></span> 
       </p> 
      </div> 
     </div> 
     <script src="jquery-3.1.1.js"></script> 
     <script src="custom.js"></script> 
    </body> 
</html> 

JS:

$(document).ready(function(){ 

    function getCurrentWeather() { 
     $.ajax({ 
      url: 'http://samples.openweathermap.org/data/2.5/weather/' , 
      jsonp: 'jsonp', 
      data: { 
       id: '2172797', 
       appid: 'b1b15e88fa797225412429c1c50c122a1' 
      }, 
      type: "GET", 
      dataType: "jsonp" 

     }) 
     $done(function(json) { 
      $('#show-weather').text(json.coord.lon); 
     }) 
    } 
}); 
+0

的'appid'是不是一個有效的字符串,嘗試用引號包圍它。 – robertklep

+0

您在瀏覽器的開發人員工具中遇到什麼錯誤? – j08691

+0

@robertklep:'appid'是有效的。 [Here](http://stackoverflow.com/a/42396151/6381711)是解決上述使用它的挑戰。 – nyedidikeke

回答

2

在我看來使用JSONP是一種破解。

使用下面的綜合方法,你可以輕鬆地使用開放天氣地圖API:

$(document).ready(function() { 
 
    $.ajax({ 
 
     type: 'GET', 
 
     data: { 
 
      id: '2172797', 
 
      appid: 'b1b15e88fa797225412429c1c50c122a1' 
 
     }, 
 
     url: 'https://samples.openweathermap.org/data/2.5/weather/', 
 
     xhrFields: { 
 
      withCredentials: false 
 
     }, 
 
     headers: {}, 
 
     success: function(data) { 
 
      console.log('success'); 
 
      console.log(data); 
 
     }, 
 
     error: function(data) { 
 
      console.log('error'); 
 
      console.log(data); 
 
     }, 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

+0

謝謝你!它現在正在運行。你能簡單解釋一下嗎? –

+0

@PrateekGogia:首先,你有'$ done'這不是一個定義好的函數,並且會讓你進入'Uncaught ReferenceError:$ done is not defined'錯誤。你應該使用'.done'。其次,您的'jsonp:'jsonp'''將以回調運行,使您進入'Uncaught SyntaxError:Unexpected token:'。簡而言之,您的代碼應該使用'.done'而不是'$ done'並且不使用'jsonp:'jsonp','。請注意,代碼中的dataType:「jsonp」在本例中不相關,因此可以簡單地刪除。 – nyedidikeke

+0

好的!謝啦! @nyedidikeke –

-1

你正在尋找的關鍵詞是 '異步編程':該jQuery.ajax()函數執行完畢後,從服務器的答案到來之前。因此,您必須事先告訴功能在稍後的時間點應該發生什麼。

作爲參數給出的屬性對象有一個特殊的鍵:success。它的值必須是服務器應答時執行的函數。

$(document).ready(function(){ 

    function getCurrentWeather() { 
     $.ajax({ 
      url: 'http://samples.openweathermap.org/data/2.5/weather/' , 
      jsonp: 'jsonp', 
      data: { 
       id: '2172797', 
       appid: 'b1b15e88fa797225412429c1c50c122a1' 
      }, 
      type: "GET", 
      dataType: "jsonp", 
     }).done(function(json) { 
      $('#show-weather').text(json.coord.lon); 
     }; 
    } 
}); 
+0

我也試過這段代碼。事實上,我已經知道這一點,我也試過。但我仍然無法獲得任何輸出。 –

+0

哦,你正在使用jQuery 3.'成功'已被刪除,有利於Promise模式。你幾乎在那裏:'.done()'而不是'$ done'。代碼已更新。 – ccprog