Uncaught ReferenceError: Sys is not defined on ASP.NET

Uncaught ReferenceError: Sys is not defined on ASP.NET

我想在 ASP.NET platform. For that I use ScriptManager. Simply I add this script with jQuery after when "document is ready 上使用 ajax。

$(document).ready(function () {

    // sync
    {{scopeName}}_init();

    // async

    Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(function (sender, args) {
        {{scopeName}}_init();
    });

});

然后就发生了这样一个神秘的javascript错误。

Uncaught ReferenceError: Sys is not defined

问如果 javascript 在第一次请求后停止工作,我有什么问题吗?

解决方法是不跳过“Sys.WebForms.PageRequestManager" using undefined条件

if (typeof(Sys) !== 'undefined') {
    Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(function (sender, args) {
        {{scopeName}}_init();
    });
}

对于回发,我们会在文档准备就绪时初始化函数 - 同步部分。

对于 ScriptManager 块中的 ajax 请求,我们需要在 "add_pageLoaded" 上注册初始化函数。之后,每次脚本在第一次请求时都能正常工作 - 异步部分。

最重要的被忽略的步骤是注册“add_endRequest”,这解决了问题。

整个示例代码:

$(document).ready(function () {

    // sync
    console.log("sync");
    {{scopeName}}_init();

    // async

    pageRequestManager = Sys.WebForms.PageRequestManager.getInstance();

    pageRequestManager.add_endRequest({{scopeName}}_onAsyncEndRequest);
    pageRequestManager.add_pageLoaded({{scopeName}}_onAsyncPageLoaded);


});

function {{scopeName}}_onAsyncEndRequest(sender, args) {
    console.log("async end");
    console.log(args);
}
function {{scopeName}}_onAsyncPageLoaded(sender, args) {
    console.log("async start");
    {{scopeName}}_init();
}

我最近 运行 自己遇到了这个问题,所以我想我会输入这个来帮助可能正在经历 same/similar 问题的人。

我发现当 VS 部署应用程序并在我的生产服务器上启动 运行 应用程序时,我的浏览器正在寻找 ScriptResource.axd(对于 ASP.NET AJAX) 和 WebResource.axd,并且在根目录中找不到任何文件。

关于这些文件的更多信息:What is WebResource.axd?