Проблема с асинхронной печатью в ESRI JavaScript API
Я использую ESRI JavaScript API версии 2.8 и ArcGIS Server 10.1 на Amazon EC2. Синхронная печать работает, но вызывает таймаут на Heroku. При включении асинхронного режима получаю ошибку 500.
Вот пример моего кода:
function ПечатьКарты() {
var инструментПечати = this;
this.выполнитьПечать = function() {
var параметры = new esri.tasks.ПараметрыПечати();
параметры.карта = карта;
параметры.шаблон = выбранныйШаблон;
задачаПечати = new esri.tasks.ЗадачаПечати(urlПечати, {async: true});
задачаПечати.выполнить(параметры, инструментПечати.печатьЗавершена, инструментПечати.ошибкаПечати);
};
this.печатьЗавершена = function(результат) {
// Обработка результата
};
this.ошибкаПечати = function(ошибка) {
// Обработка ошибки
};
}
Как правильно настроить асинхронную печать? Есть ли примеры рабочего кода?
Дружище, у тебя там реально геморрой с этой печатью. Я бы на твоем месте для начала проверил логи на сервере - там может быть какая-то конкретика по 500-й ошибке. Еще вариант - попробуй отключить все фильтры и слои на карте перед печатью, иногда это помогает. А вообще, я бы посоветовал обновиться до 4.x версии API - там с асинхронной печатью намного меньше проблем. Ну и не забудь проверить настройки CORS на сервере, если используешь разные домены.
Привет! С асинхронной печатью в ESRI API бывают заморочки. У меня тоже были похожие проблемы. Попробуй добавить обработку таймаута в функцию ошибкаПечати. Например:
this.ошибкаПечати = function(ошибка) {
if (ошибка.name === 'Timeout') {
console.log('Превышено время ожидания. Повторяем запрос...');
setTimeout(function() {
инструментПечати.выполнитьПечать();
}, 5000);
} else {
console.error('Ошибка печати:', ошибка);
}
};
Еще можно попробовать увеличить время ожидания для задачи печати:
задачаПечати = new esri.tasks.ЗадачаПечати(urlПечати, {async: true, timeout: 300000});
Надеюсь, это поможет! Дай знать, если будут еще вопросы.
Знаешь, я сталкивался с похожей проблемой. Попробуй проверить настройки сервера печати на ArcGIS Server. Возможно, там стоит ограничение на асинхронные задачи. Еще вариант - увеличить таймаут на стороне клиента. А ты пробовал использовать более новую версию API? В 4.x многие баги пофиксили. Если ничего не поможет, можно попробовать реализовать печать через собственный прокси-сервер.