jQuery脚本第一次无法正常工作

4
当我在一天的开始访问某个特定页面时,不会显示任何数据。刷新同一页后,数据将出现如预期所述。如果我一个小时后再次访问同一页,则数据仍将显示。然而,到了第二天,同样的情况又会发生。第一次访问页面时没有数据,但刷新后就会出现。
所涉及的页面使用带有ajax调用的jquery脚本。
该脚本本身是在Sharepoint 2010环境中使用的,并使用ListData.svc获取数据(名称,ID,类型等),获取实际数据似乎不是问题(至少在我刷新时不是)。
有人有想法这可能是为什么吗?
代码:
<script type="text/javascript">
$(document).ready(function () {

    function getUrlVars() {
        var vars = [], hash;
        var hashes = window.parent.location.href.slice(window.parent.location.href.indexOf('?') + 1).split('&');
        for (var i = 0; i < hashes.length; i++) {
            hash = hashes[i].split('=');
            vars.push(hash[0]);
            vars[hash[0]] = hash[1];
        }
        return vars;
    }

    var pTypeval = getUrlVars()["projectType"];
    $('#projTypeHeader').append(unescape(pTypeval));

    $.ajax({
        url: "/../Projects/1/_vti_bin/ListData.svc/Projectlist?$select=ID,Projectname,ProjectTypeValue,ProjectHeading,PublishInfoscreen&$filter=(ProjectTypeValue%20eq%20%27" + pTypeval + "%27)%20and%20(PublishInfoscreen%20eq%20true)",
        method: "GET",
        dataType: "JSON",
        headers: { "accept": "application/json; odata=verbose" },
        success: function (data) {
            $('#projectRow').empty();

            $.each(data.d.results, function (index, item) {
                var itemExist = false;
                $.each($('.projectRow').find('h1'), function (index1, item1) {
                    if (item1.innerHTML == item.ProjectHeading) {
                        itemExist = true;
                        $(item1).parent().append("<h3><a id=" + item.ID + " class='projectLink' href='javascript:void(0)'>" + item.Projectname+ "</a></h3>");

                    }
                });
                if (itemExist == false)
                    $('.projectRow').append("<div class='projectHeadingDiv left'><li><h1>" + item.ProjectHeading + "</h1><h3><a id='" + item.ID + "' class='projectLink'  href='javascript:void(0)'>" + item.Projectname+ "</a></h3></div>");
            });
        },
        error: function (error) {
            alert(JSON.stringify(error));
        }
    });

});
</script>

更新: 根据评论中的建议,我尝试将函数getUrlVars()从document.ready中移出,但这并没有帮助。 然而,今天早上我尝试使用不同的浏览器,在第一次获取时我得到了以下错误:

内网站点显示: {"readyState":4,"responseText":"{\r\n\"error\": {\r\n"code\": \"\", \"message\": {\r\n\"lang\": \"en-US\", \"value": \Type 'Microsoft.Sharepoint.DataService.ProjectlistItem' does not have a property named 'ID'. \"\r\n}\r\n}\r\r}","status": 400,"statusText":"error"}

刷新页面后数据会出现。似乎在第一次GET时,它找不到列表中的项目,但第二次GET后它就可以正常工作了。有什么建议吗?


尝试将 getUrlVars() 函数放在 document.ready 之外。 - Amit Soni
我的猜测是服务器在晚上进入休眠状态,而你在早上唤醒它,但第一个调用会超时。你能否发布错误响应的内容? - Moti Korets
谢谢回复。我明天早上才能得到错误响应,但是一旦我得到它,我会在这里发布。我还会尝试将getUrlVars()函数放在document.ready之外。 - user3463093
@MotiKorets 我已经更新了原始帖子,附上我收到的错误信息。 - user3463093
3
看起来你的问题与 SharePoint 有更大的关系,而不是与 jQuery。我建议适当地标记问题。检查服务器是否存在任何睡眠配置。 - Moti Korets
请检查缓存:jQuery库是否被缓存了一天?如果是,这意味着在获取它(第一次)后,您不需要整天再次加载它。您在页面的哪里/如何加载jQuery库? - Emmanuel Gleizer
1个回答

0

SharePoint应用程序池每晚都会循环。因此,每天在SharePoint站点上的第一次访问可能需要一些时间来启动所有内容。有些人运行此PowerShell脚本以持续使SP服务器处于活动状态。这应该解决您早上访问的Web服务出现滞后的问题。

http://blogs.technet.com/b/praveenh/archive/2013/03/12/sfsgfasg.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接