0

私はqtip2を使用していますが、jQueryajaxを使用しているようです。

IE8では問題はありません。エラーが発生し、完全になります

Fx 6+では、エラーが発生することはありません。

再現するには:

  1. http://plungjan.name/eclatooltip/にアクセスします
  2. firebugNetまたは他のhttpスニファをオンにします
  3. 2番目の結果の2番目のIPCにマウスを合わせる-B65D30/08

結果:

  • IE:メッセージ:「何も見つかりませんでした」
  • Fx:戻ることも、エラーを実行することも、完了することもありません

私はこれを見ましたhttps://gist.github.com/82181

しかし、私のコードでそれを使用する方法がわかりません。


使用したコード(eclatt.js)

    ajax: {
      dataType: 'jsonp',
      url: url,
      once: false,
      complete: function(jqXHR, textStatus) { // works perfectly in IE
        // alert("complete:"+jqXHR+":"+ textStatus)
      },
      error: function() { // works perfectly in IE8
        alert('Error')
        this.set('content.text', "Nothing found");
      },
      success: function(oData, sTextStatus, oJqXhr) {
        /* Construct list */

        ... 

        this.set('content.text', sHtml);
      }
    },
4

1 に答える 1

1

どうやら問題は、JSONP呼び出しがDOMに<script>タグを追加することによって処理され、ネットワーク関連のエラー(404など)がハンドラーをトリガーしないことです(少なくとも、そうすべきではありませんが、IEは実際よりも賢い)。

jQuery.ajaxエラーハンドラーの説明からの引用:

注:このハンドラーは、クロスドメインスクリプトおよびJSONPリクエストでは呼び出されません。

この問題を克服するために、この1つのjquery-jsonpのようなプラグインがあり、追加されたスクリプトタグのソースが読み込まれるたびにチェックし、そうでない場合は適切なコールバックを起動します。

アップデート

qtip2https://github.com/Craga89/qTip2/blob/master/src/ajax/ajax.js用のajaxプラグインのソースは次のとおりです。あなたはおそらく置き換えることができます

// Error handler
function errorHandler(xh, status, error){ api.set('content.text', status + ': ' + error); }
// Setup $.ajax option object and process the request
$.ajax( $.extend({ success: successHandler, error: errorHandler, context: api }, opts, { url: url, complete: after }) );

これとともに:

if (opts.dataType && opts.dataType.toLowerCase() == 'jsonp') {
    // Error handler
    function jsonpErrorHandler(xOptions, status) {api.set('content.text', 'error: ' + status);}
    // Setup using jsonp
    $.jsonp( $.extend({ success: successHandler, error: jsonpErrorHandler, context: api }, opts, { url: url, complete: after }) );
} else {
    // Error handler
    function errorHandler(xh, status, error){ api.set('content.text', status + ': ' + error); }
    // Setup $.ajax option object and process the request
    $.ajax( $.extend({ success: successHandler, error: errorHandler, context: api }, opts, { url: url, complete: after }) );
}

jquery-jsonpプラグインを埋め込んでいれば機能するはずです。

于 2011-09-12T10:11:12.827 に答える