Javascript 未捕获的 ReferenceError:类型未在 sp.runtime.js 中定义

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/25943397/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-22 22:07:25  来源:igfitidea点击:

Uncaught ReferenceError: Type is not defined in sp.runtime.js

javascriptjquerysharepointsharepoint-appsofficedev

提问by Luis Valencia

I am trying to use the taxonomy Picker example from Office PnP.

我正在尝试使用 Office PnP 中的分类选择器示例。

I just want to bind one field to one managed metadata term.

我只想将一个字段绑定到一个托管元数据术语。

The errors I got are here: http://screencast.com/t/nOaTusUH4V

我得到的错误在这里:http: //screencast.com/t/nOaTusUH4V

The code I have is:

我的代码是:

<head>
    <meta charset="utf-8" />
    <title>Learning bootstrap</title>    
    <meta name="viewport" content="width=device-width, initial-scale=1">   

    <link href="../Content/bootstrap.min.css" rel="stylesheet" /> 
    <link href="../Content/bootstrap-theme.min.css" rel="stylesheet" />
    <link rel="Stylesheet" type="text/css" href="../Content/taxonomypickercontrol.css" />
    <script src="../Scripts/jquery-2.1.1.min.js"></script>
    <script type="text/javascript" src="/_layouts/15/sp.runtime.js"></script>
    <script type="text/javascript" src="/_layouts/15/sp.js"></script>

    <script src="../Scripts/app.js" type="text/javascript"></script>
    <script src="../Scripts/taxonomypickercontrol.js" type="text/javascript"></script>
</head>


body>
    <div id="divSPChrome"></div>
    <div class="container">      
        <div class="row">
            <div class="col-md-8">
                <h2>Create project site</h2>
                <form class="form-horizontal" role="form">
                    <div class="form-group">
                        <label for="inputEmail3" class="col-sm-2 control-label">Project name</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" id="inputEmail3" placeholder="Project name">
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="inputPassword3" class="col-sm-2 control-label">Domain</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" id="inputPassword3" placeholder="Domain">
                            <div class="ms-core-form-line" style="margin-bottom: 0px;">
                               <input type="hidden" id="taxPickerContinent" />

                            </div>
                        </div>
                    </div>

As you can see I have the hidden field. And my App.js file is:

如您所见,我有隐藏字段。我的 App.js 文件是:

// variable used for cross site CSOM calls
var context;
// variable to hold index of intialized taxPicker controls
var taxPickerIndex = {};

//Wait for the page to load
$(document).ready(function () {

    //Get the URI decoded SharePoint site url from the SPHostUrl parameter.
    var spHostUrl = decodeURIComponent(getQueryStringParameter('SPHostUrl'));
    var appWebUrl = decodeURIComponent(getQueryStringParameter('SPAppWebUrl'));
    var spLanguage = decodeURIComponent(getQueryStringParameter('SPLanguage'));

    //Build absolute path to the layouts root with the spHostUrl
    var layoutsRoot = spHostUrl + '/_layouts/15/';

    //load all appropriate scripts for the page to function
    $.getScript(layoutsRoot + 'SP.Runtime.js',
        function () {
            $.getScript(layoutsRoot + 'SP.js',
                function () {
                    //Load the SP.UI.Controls.js file to render the App Chrome
                    $.getScript(layoutsRoot + 'SP.UI.Controls.js', renderSPChrome);

                    //load scripts for cross site calls (needed to use the people picker control in an IFrame)
                    $.getScript(layoutsRoot + 'SP.RequestExecutor.js', function () {
                        context = new SP.ClientContext(appWebUrl);
                        var factory = new SP.ProxyWebRequestExecutorFactory(appWebUrl);
                        context.set_webRequestExecutorFactory(factory);
                    });

                    //load scripts for calling taxonomy APIs
                    $.getScript(layoutsRoot + 'init.js',
                        function () {
                            $.getScript(layoutsRoot + 'sp.taxonomy.js',
                                function () {
                                    //bind the taxonomy picker to the default keywords termset
                                    //$('#taxPickerKeywords').taxpicker({ isMulti: true, allowFillIn: true, useKeywords: true }, context);

                                    $('#taxPickerContinent').taxpicker({ isMulti: false, allowFillIn: false, useKeywords: false, termSetId: "51f18389-f28a-4961-a903-ee535f7c620d", levelToShowTerms: 1 }, context, initializeCountryTaxPicker);
                                    taxPickerIndex["#taxPickerContinent"] = 0;
                                });
                        });
                });
        });
});

function initializeCountryTaxPicker() {
    //if (this._selectedTerms.length > 0) {
    //    $('#taxPickerCountry').taxpicker({ isMulti: false, allowFillIn: false, useKeywords: false, termSetId: "0cc96f04-d32c-41e7-995f-0401c1f4fda8", filterTermId: this._selectedTerms[0].Id, levelToShowTerms: 2, useTermSetasRootNode: false }, context, initializeRegionTaxPicker);
    //    taxPickerIndex["#taxPickerCountry"] = 4;
    //}
}

function initializeRegionTaxPicker() {
    //if (this._selectedTerms.length > 0) {
    //    $('#taxPickerRegion').taxpicker({ isMulti: false, allowFillIn: false, useKeywords: false, termSetId: "0cc96f04-d32c-41e7-995f-0401c1f4fda8", filterTermId: this._selectedTerms[0].Id, levelToShowTerms: 3, useTermSetasRootNode: false }, context);
    //    taxPickerIndex["#taxPickerRegion"] = 5;
    //}
}

function getValue(propertyName) {
    if (taxPickerIndex != null) {
        return taxPickerIndex[propertyName];
    }
};

//function to get a parameter value by a specific key
function getQueryStringParameter(urlParameterKey) {
    var params = document.URL.split('?')[1].split('&');
    var strParams = '';
    for (var i = 0; i < params.length; i = i + 1) {
        var singleParam = params[i].split('=');
        if (singleParam[0] == urlParameterKey)
            return singleParam[1];
    }
}

function chromeLoaded() {
    $('body').show();
}

//function callback to render chrome after SP.UI.Controls.js loads
function renderSPChrome() {
    var icon = decodeURIComponent(getQueryStringParameter('SPHostLogoUrl'));

    //Set the chrome options for launching Help, Account, and Contact pages
    var options = {
        'appTitle': document.title,
        'appIconUrl': icon,
        'onCssLoaded': 'chromeLoaded()'
    };

    //Load the Chrome Control in the divSPChrome element of the page
    var chromeNavigation = new SP.UI.Controls.Navigation('divSPChrome', options);
    chromeNavigation.setVisible(true);
}

回答by Ryan Shripat

Typeis defined in the MicrosoftAjax.js file. You can get access to it by using the following scripttag to get it from the aspnet CDN:

Type在 MicrosoftAjax.js 文件中定义。您可以通过使用以下script标签从 aspnet CDN 获取它来访问它:

<script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js"></script>

You do not need the ScriptManager.

您不需要 ScriptManager。

回答by Max

You load SP.Runtime.jsand SP.jstwice. Once on the head and on document ready. Try to remove one of them, but the error can be another I see more error before 404.

您加载SP.Runtime.jsSP.js两次。一旦在头上并准备好文件。尝试删除其中一个,但错误可能是另一个我在 404 之前看到更多错误。

回答by Sander Lesage

you're missing the scriptmanager. Put it above <div id="divSPChrome"></div>

你缺少脚本管理器。放在上面<div id="divSPChrome"></div>

<asp:ScriptManager ID="ScriptManager" runat="server" EnableCdn="True" />

When your are working in html pages, just try to reference this after loading jquery.

当您在 html 页面中工作时,只需在加载 jquery 后尝试引用它。

<script src="https://ajax.aspnetcdn.com/ajax/4.0/MicrosoftAjax.js" type="text/javascript"></script> 

回答by aahoogendoorn

It's likely due to the order in which you register the scripts. Referenced libraries should be registered before the scripts that use them. It is easiest to check your page in the browser, you'll see the order in which they load.

这可能是由于您注册脚本的顺序造成的。引用的库应该在使用它们的脚本之前注册。在浏览器中检查您的页面是最容易的,您会看到它们加载的顺序。