3

设置:

我正在使用ESRI 的 javascript API v. 2.8,它本身使用dojo 工具包 v. 1.6。我在 Amazon 的 EC2 中的 Windows 上运行ArcGIS Server v. 10.1 。

我可以使用将 JSON POST 到我的服务器的 javascript 成功执行 PrintTask,该服务器运行一个进程并将 PDF 返回到客户端浏览器。但是这个请求是同步的,可能需要一两分钟,导致Heroku超时并出现 H12 错误。

问题:

当我在 ArcGIS 服务器上将 [ ] Asynchronous 复选框切换为ON时,我的 PrintTask 返回:

{"error":{"code":500,"message":"Error performing execute operation","details":[]}}

我不知道从这里去哪里。有人有在 ArcGIS 服务器上运行异步打印任务的示例或经验吗?

printTask 的 javascript 如下。有没有办法将这个 javascript 重写为更加异步或“非阻塞”?

编码

(为简洁起见)

dojo.require("esri.tasks.PrintTask");

function Print() {
  var printTool = this;

  this.executePrint = function(){
    var params = new esri.tasks.PrintParameters();
    params.map = map;
    params.template = selectedTemplate;
    printTask = new esri.tasks.PrintTask(printUrl, {async: true});
    printTask.execute(params, printTool.printComplete, printTool.printError);
  };

  this.printComplete = function(result){
    dojo.place("<div><a href='" + result.url + "'></a></div>", printForm, "last");
  };

  this.printError = function(err){
    dojo.byId("printJob").innerHTML = err;
  };

}
4

2 回答 2

1

调用打印任务时,如果任务是异步的,则需要调用 printTask.submitJob 方法,而不是执行方法。

请参阅 https://developers.arcgis.com/javascript/jshelp/intro_gp_running.html

于 2015-04-23T04:24:04.577 回答
0

如果它是页面加载驱动的事件,请使用dojo.addOnLoador dojo.ready,具体取决于您的版本。

如果您Print从用户事件(例如点击)调用,最简单的方法是安排它在空闲时运行

function whenIdle(ptr_fun) {
    setTimeout(ptr_fun, 1);
}
whenIdle(Print);
于 2012-09-15T02:06:46.410 回答