Очевидно, проблема в том, что вызовы JSONP обрабатываются путем добавления тега в DOM, а ошибки, связанные с сетью (например, 404), не вызывают обработчики (по крайней мере, не должны, я думаю, IEпытаюсь быть умнее, чем есть на самом деле).
Цитата из описания обработчика ошибок jQuery.ajax :
Примечание: этот обработчик не вызывается для кросс-domain скрипт и запросы JSONP.
Для решения этой проблемы существуют плагины, подобные этому jquery-jsonp , которые проверяют всякий раз, когда источник тега добавленного скрипта имеетзагружены и запускают соответствующие обратные вызовы, если нет.
Обновление
Вот источник для плагина ajax для qtip2 https://github.com/Craga89/qTip2/blob/master/src/ajax/ajax.js. Скорее всего, вы можете заменить
// 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.