4

これが私のコードです。Leaflet ライブラリを読み込もうとします。オプションcrossDomaintrueにすると、エラー コールバックが発生しません。オプションを false にすると、エラー コールバックが発生しますが、クロスドメインであるため、js をダウンロードできません。

なぜそんなに難しいのですか?これに対する解決策はありますか?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:同じことが crossdomain にも当てはまります$.getScript(...).fail(...)

4

1 に答える 1

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

ここを見てください:クロスドメイン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
});
于 2012-04-10T18:58:17.240 に答える