2012-09-14 78 views
2

的設置:

我現在用的是javascript API v. 2.8 from ESRI,它本身使用Dojo工具包V 1.6。我在亞馬遜的EC2上的Windows上運行ArcGIS Server v. 10.1ESRI異步的JavaScript打印

我可以成功執行JavaScript的PrintTask,將JSON發佈到我的服務器,該服務器運行一個進程並將PDF返回給客戶端瀏覽器。但是這個請求是同步並且可能需要一兩分鐘的時間,導致Heroku超時併發生H12錯誤。

問題:

當我切換[]異步複選框ON在ArcGIS服務器上,我PrintTask返回:

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

我不知道在哪裏可以從這裏走。任何人都有任何在ArcGIS Server上運行異步打印任務的例子或經驗嗎?

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; 
    }; 

} 

回答

0

如果它的頁面加載驅動事件中使用dojo.addOnLoaddojo.ready,根據您的版本。

如果你從一個用戶事件調用Print(如點擊)最簡單的辦法就是安排其運行,空閒時

function whenIdle(ptr_fun) { 
    setTimeout(ptr_fun, 1); 
} 
whenIdle(Print); 
+1

2.8升級到3.2解決了這一問題。似乎{async:true}參數在2.8上沒有什麼區別,但是在3.2上有效。 – ballPointPenguin

1

當調用打印任務,如果任務是異步的調用將需要是printTask.submitJob方法,而不是執行方法。

請參閱從ESRI的JavaScript API版本 https://developers.arcgis.com/javascript/jshelp/intro_gp_running.html

+0

作爲別人的記錄;在PrintParameters中將async設置爲true時submitJob被調用。否則,在同步時,調用execute()函數。您的JavaScript代碼仍然會調用printTask.execute,但使用開發工具時,您會注意到該URL顯示submitJob由printTask調用(例如,arcgis/rest/services/Utilities/PrintingTools/GPServer/Export%20Web% 20Map%20Task/submitJob)。 – iCode