“Microsoft JScript编译错误:预期';'”调用ASMX Web服务

时间:2010-10-05 14:55:30

标签: .net asp.net web-services javascript

我有一个非常简单的ASP.NET Web应用程序,在Visual Studio 2008(SP1)下创建,面向.NET 3.5。

  • 启动页面是一个愚蠢的ASPX页面,包含4个文本框,一个按钮和两个JScript函数:
    • 正文的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编译错误:预期';'

现在,这令人困惑,研究通常建议确保安装Java。我一开始嘲笑,认为我,凭借我庞大而明显优越的智慧,不可能犯下如此愚蠢的错误,每个人都知道Java和JavaScript之间的区别。所以,当没有人看的时候,我试了一下。它没有任何区别。

我不知道造成这种情况的原因。堆栈跟踪显示它是堆栈上唯一的调用。甚至没有任何局部变量可供使用。它出现的文件是生成的动态脚本资源。但是,该函数是Sys.Net.XMLHttpExecutor对象的_onReadyStateChange函数。所以我至少可以说它在AJAX代码中始终如一。

有没有人见过这个?如果你这样做了,原因是什么,你是如何解决的?

服务器端:

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

开发

  • Visual Studio 2008 SP1
  • .NET 3.5
  • IE 8
  • IIS 7

2 个答案:

答案 0 :(得分:2)

我将发布这个问题的答案,冒着让自己尴尬的风险。

在JScript代码中,我正在评估调用的结果,如下所示:

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

显然,问题在于,当您将JSON字符串传递给eval时,必须将JSON字符串括在括号中,如下所示:

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

不要问我为什么会这样,它就是这样。我稍后会弄清楚原因。

答案 1 :(得分:1)

请参阅this question以获取有关为何需要括号的解释(以及为什么不应使用eval来解析Json)