2012-04-10 15 views
4

ここに私のコードです。リーフレットライブラリを読み込もうとします。 crossDomainオプションをtrueにすると、エラーコールバックは発生しません。このオプションをfalseにすると、エラーコールバックが発生しますが、クロスドメインなのでjsをダウンロードできません。jQueryはクロスドメインスクリプトでエラーコールバックを発生しません

なぜそう難しいですか?これには何か解決策はありますか? Webマップの代わりに画像のプレースホルダがあります(最初に読み込まずにページの読み込み時間を節約するため)。ユーザーがマップをアクティブにすると、jsが読み込まれます。しかし、失敗した場合は、通常のエラーメッセージと再試行ボタンを表示する必要があります。

$.ajax({ 
    url: 'http://code.leafletjs.com/leaflet-0.3.1/leaflet.js', 
    success: start_map, 
    error: show_map_error, 
    dataType: 'script', 
    crossDomain: true 
}); 

アップデート:私はcompleteコールバックを試してみましたが、それはどちらか動作しません。

update2:同じことがクロスドメイン$.getScript(...).fail(...)に適用されます。

答えて

6

CrossdomainとAjaxは今やいつも迷惑です。これはJavaScriptの問題であり、jQueryの問題ではありません。

基本的には次のようなものです。クロスドメイン機能をオフにすると、jQuery/JavaScriptは同じドメイン呼び出しを期待するため、エラーが発生します。これはそうではないため、失敗します。

クロスドメインコールを行っているときにcrossDomainがtrueに設定されていると、JavaScriptのクロスドメインの制限が原因でエラーにはなりません。

これにはいくつかの解決策(または回避策)があります。

最初に、あなたが呼び出しているバックエンドシステムにアクセスできる場合、(私の例ではPHPの)ヘッダーを設定してクロスドメインコールを許可することができます。 (ここでJSONPをリクエストしているとしますか?)これを行うと、JavaScriptは呼び出しを受け入れ、クロスドメインのトリックは必要ありません。ここ

header('Access-Control-Allow-Origin: http://domain1.com, http://domain2.com'); //whitelist 

ルック:あなたはバックエンドへのアクセスを持っていない場合はCross domain xmlhttp

、あなたは基本的には誤差関数火災決してなどのAjaxコールのタイムアウトで回避策を、実行する必要があります。ただし、この回避策は非常に汚れています。回線に問題やインターネットが遅い場合は、このタイムアウトが発生します。

$.ajax({ 
    url: 'http://code.leafletjs.com/leaflet-0.3.1/leaflet.js', 
    success: start_map, 
    error: show_map_error, 
    timeout: 2000, // 2 seconds timeout before error function will be called 
    dataType: 'script', 
    crossDomain: true 
}); 
関連する問題