2016-05-18 12 views
2

私はip-api.com/jsonへのAPI呼び出しをしようとしていますが、私はそれが広告ブロッカーによってブロックされていると理解しています。私は別の方法でこれを解決することができるように、try-catchを追加してスクリプトをcatchブロックに入れるようには見えず、代わりにエラーをスローします。APIコール中のキャッチエラーが機能していませんか?

ここにスローされた例外をキャッチする方法はありますか?

$(document).ready(function() { 

    try { 
     /* Try getting the request with the required parameters 
      Otherwise use default ones */ 
     jQuery.getJSON(API_Location, "", function(position) { 
      if (position.lat && position.lon) { 
       updateWeather(position); 
      } else { 
       updateWeather({"lat":DEFAULT_LAT, "lon":DEFAULT_LON}); 
      } 
     }); 
    } catch(err) { 
     /* TODO display warning message */ 
     console.log('option b'); 
     updateWeather({"lat":DEFAULT_LAT, "lon":DEFAULT_LON}); 
    } 
}); 

catchブロックがトリガされず、代わりにそれが例外をスローしているん:

jquery.min.js:行わ4 GET http://ip-api.com/jsonネット:: ERR_BLOCKED_BY_CLIENT

+0

**私のために実行..私はあなたが' .ERROR(機能を(追加した参照@GuruprasadRao –

+0

)..) 'をコードに追加します。これは違いを生み出すことができますか?ログに記録されたレスポンスが表示されない場合でも、コードはこの部分がなくても機能していないようです。 – Nescio

+0

@GuruprasadRaoさらに詳しい調査では、 'error()'は実際にはcatchステートメントによってキャッチされた例外をスローする関数です。 – Nescio

答えて

1

デフォルトを使用、エラーをトリガーできません。 ** [ `てみcatch`](https://jsfiddle.net/Guruprasad_Rao/jnrstxu1/)

API_Location=' http://ip-api.com/json1'; 
     $.getJSON(API_Location) 
      .done(function(position) { 
       if (position.lat && position.lon) { 
       updateWeather(position); 
      } else { 
       updateWeather({"lat":DEFAULT_LAT, "lon":DEFAULT_LON}); 
      } 
      }) 
      .fail(function(jqxhr, textStatus, error) { 
      var err = textStatus + ", " + error; 
      console.log("Request Failed: " + err); 
     }); 
+0

まさに私が探していたものです。ありがとうございました! [jQuery docs](http://api.jquery.com/jquery.getjson/)へのリンクは、今後の読者にも適していると思います。私はそこにそれを逃した:/ – Nescio

関連する問題