为什么SP.js没有加载?

时间:2013-05-09 13:56:29

标签: javascript sharepoint sp.js

我已经对此进行了彻底的研究,每个人都说我下面的代码应该加载SP.js,但我无法加载它。

调试我得到:

NewForm.aspx, line 1667 character 5
SCRIPT5009: 'PeoplePicker' is undefined 

并且在查看源下看不到SP.JS。

<SharePoint:ScriptLink Name="SP.js" runat="server" OnDemand="true" 
    Localizable="false" /> 
<script type="text/javascript">

ExecuteOrDelayUntilScriptLoaded(SetWebUserData(), "SP.js");

function SetWebUserData() {
    var pplPicker = new PeoplePicker();
    // Set the parent tag id of the people the picker.
    pplPicker.SetParentTagId('Main_x0020_Contact');
    pplPicker.SetLoggedInUser();
    };
</script>

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:5)

您正在使用ExecuteOrDelayUntilScriptLoaded错误。您应该只传递函数名称,它应该如下所示:

ExecuteOrDelayUntilScriptLoaded(SetWebUserData, "sp.js");

没有()

答案 1 :(得分:1)

我能够通过使用此处的代码解决问题并让当前用户填充人员选择器: http://vbcity.com/blogs/skullcrusher/archive/2008/11/04/set-sharepoint-peoplepicker-field-mark-2.aspx

此代码不需要SP.js

我从来没有能够正确加载sp.js,但是这个解决方案解决了我的问题。

答案 2 :(得分:1)

ExecuteOrDelayUntilScriptLoaded 的第一个参数必须是功能。 在加载请求的脚本文件后调用此函数。

<SharePoint:ScriptLink Name="SP.js" runat="server" OnDemand="true" 
    Localizable="false" /> 
<script type="text/javascript">

ExecuteOrDelayUntilScriptLoaded(SetWebUserData, "SP.js");

function SetWebUserData() {
    var pplPicker = new PeoplePicker();
    // Set the parent tag id of the people the picker.
    pplPicker.SetParentTagId('Main_x0020_Contact');
    pplPicker.SetLoggedInUser();
    };
</script>

使用(),您调用一个函数。 这意味着,您的错误是将函数的结果作为参数传递,而不是函数本身。

更好理解的例子:

function helloFunction() {
    return 42;
}

var myHelloFunction = helloFunction; // Function is passed
var myHelloFunctionResult = helloFunction(); // Result of your function (42) is passed

答案 3 :(得分:0)

我知道这有点晚了,但我认为这是你正在寻找的答案。

SP.SOD.executeFunc('sp.js', 'SP.ClientContext',function(){
  var pplPicker = new PeoplePicker();
  // Set the parent tag id of the people the picker.
  pplPicker.SetParentTagId('Main_x0020_Contact');
  pplPicker.SetLoggedInUser();
};