未捕获的ReferenceError:在ASP.NET上未定义Sys

时间:2016-02-23 20:11:24

标签: javascript asp.net ajax scriptmanager

我想在ASP.NET平台上使用ajax。为此我使用ScriptManager。我只需在“jQuery”之后用document is ready添加此脚本。

$(document).ready(function () {

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

    // async

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

});

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

  

未捕获的ReferenceError:未定义Sys

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

2 个答案:

答案 0 :(得分:0)

解决方案不会使用Sys.WebForms.PageRequestManager条件

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

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

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

最重要的被忽视的步骤是注册“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();
}

答案 1 :(得分:0)

我最近亲自遇到了这个问题,因此我想输入此内容可以帮助可能遇到相同/相似问题的人。

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

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