Вы, вероятно, должны удалить начальную часть из ответа:
$.ajax(url, {
dataType: "jsonp text",
success: function(data) {
var jsonString = data.replace(/^throw 1; <dont be evil> /, "");
var responseObject = $.parseJSON(jsonString);
// do something with responseObject
...
}
}
UPDATE:
Чтобы сделать перезапись доступной для каждого вызова Ajax, вы также можете зарегистрировать глобальный Ajax Converter в jQuery:
$.ajaxSetup({
converters: {
"text cleanedjson": function(data) {
var jsonString = data.replace(/^throw 1; <dont be evil> /, "");
return $.parseJSON(jsonString);
}
}
});
$.ajax(url, {
dataType: "jsonp cleanedjson",
success: function(responseObject) {
// do something with responseObject
...
}
});
Вам все равно нужно будет указать ваш определенный dataType
в параметрах запроса.
ОБНОВЛЕНИЕ 2:
Если вам нужно настроить существующие вызовы для автоматической очистки ответа, вы можете установить реализацию jQuery ajax
, чтобы автоматически использовать конвертер в определенных ситуациях:
// store reference to original implementation
$._ajax_original = $.ajax;
// redefine jQuery's ajax function
$.ajax = function(url, settings) {
if (… your test for applicability here (e.g. an url check) …) {
settings.dataType = "jsonp cleanedjson";
}
return $._ajax_original(url, settings);
};
Обратите внимание, что это переопределение должно быть включено после загрузки jQuery и перед первым вызовом Ajax. Вам также может понадобиться учесть, что $.ajax
также можно вызывать без отдельного url
параметра ...