2010-10-05 50 views
1

我有一個非常簡單的ASP.NET Web應用程序,在Visual Studio 2008(SP1)下創建,面向.NET 3.5。「Microsoft JScript編譯錯誤:預期';'」調用ASMX Web服務

  • 啓動頁是4個文本框,一個按鈕,和兩個JScript的功能簡單化了ASPX頁面:
    • 一個onload處理程序的身體。此功能只是將文本框的值設置爲測試的特定日期和時間。
    • 按鈕的OnClick處理程序。該處理程序調用本地化Web服務並顯示其結果。
  • 本地化是一項Web服務。它的工作是獲取用戶的區域和國家信息,創建CultureInfo對象,並解析日期和時間信息,以便可以驗證開始日期是否在結束日期之前。這只是只有可靠的方式來做到這一點,而不用大量的JScript代碼,基本上重新發明輪子。結果作爲JSON字符串返回。

一切似乎工作得很好,直到我開始從調試器得到這些怪異的錯誤消息。調試器將打破這一行:

 try { 
      _this._webRequest.completed(Sys.EventArgs.Empty); 
     } 
     finally { // <-- RIGHT HERE, specifically, on the brace 
      if (_this._xmlHttpRequest != null) { 
       _this._xmlHttpRequest.onreadystatechange = Function.emptyMethod; 
       _this._xmlHttpRequest = null; 
      } 
     } 

的錯誤信息是這樣的:

Microsoft JScript compilation error: Expected ';'

現在,這是令人費解,並研究通常建議以確保已安裝的Java。我開始嘲笑,認爲我憑藉自己廣泛而明顯的優秀智慧,不可能犯這麼愚蠢的錯誤,並且知道每個人都知道Java和JavaScript之間的區別。所以,當沒人看的時候,我試了一下。它沒有任何區別。

我不知道是什麼導致這種情況發生。堆棧跟蹤顯示它是堆棧中唯一的調用。甚至沒有任何本地變量可以使用。它發生的文件是一個生成的動態腳本資源。該函數是Sys.Net.XMLHttpExecutor對象的_onReadyStateChange函數。所以我至少可以說它在AJAX代碼中一直髮生。

有沒有其他人看到過這個?如果你有,它的原因是什麼,你是如何解決它的?

服務器端:

  • 的Windows 2000
  • IIS 7
  • ASP.NET
  • .NET 3.5

發展

  • 的Visual Studio 200 8 SP1
  • .NET 3。5
  • IE 8
  • IIS 7
+0

你能提供的代碼在剩餘finally塊? – GenericTypeTea 2010-10-05 15:06:49

+0

你不能依靠在JavaScript錯誤的行號 - 你嘗試另一個瀏覽器?我會推薦FireFox與螢火蟲。 – 2010-10-05 15:11:33

+0

按要求添加Finally塊的其餘部分。 – 2010-10-05 15:40:19

回答

2

我要的答案張貼到這個問題,在我難堪的風險。

在JScript代碼,我被評估調用的結果如下:

function(r) 
{ 
    var result = eval(r); 
    if (!result.Succeeded) 
     alert(result.Reason); 
}); 

的問題,很明顯,是你有,當你把它傳遞給EVAL以括號括起來的JSON字符串,像這樣:

function(r) 
{ 
    var result = eval("(" + r + ")"); 
    if (!result.Succeeded) 
     alert(result.Reason); 
}); 

不要問我爲什麼這個工程,它只是做。我將在後面解釋爲什麼。

1

對於爲什麼需要括號的說明,請參見this question(爲什麼你不應該爲解析JSON使用eval)