根据if条件选择ajax url

时间:2017-06-19 22:34:08

标签: javascript jquery json ajax sharepoint-2013

我有两个AJAX请求,我想根据用户是否为admin来更改第二个AJAX的URL。如果用户不是管理员,则在AJAX调用中将使用不同的URL。我收到一个错误,说URL:abcUrl未定义。我知道我可能会因为提出这样的问题而被投票,但我真的需要更新第二个ajax URL,这对我来说将是一次学习经历,因为我是新的AJAX。非常感谢。

var url;
$.ajax( {
        url: sharepointBaseUrl + "_api/web/currentUser/groups?$select=title",
        method: "GET",
        headers: { "Accept": "application/json; odata=verbose" },
        success: function (data) {
            var items = data.d.results;
            for (var i = 0, len = items.length; i < len; i++) {
                if (items[i].Title == adminGroupName) { 
                 self.currentUserIsAdmin(true); 
                 abcUrl="Some Url1";
                }
                else{
                 abcUrl="Some Url2";
                }
           }
        },
        error: function (data) { alert("ERROR: " + data) }
} );

$.ajax( {
    url: sharepointScenarioListUrl + abcUrl,
    method: "GET",
    headers: { "Accept": "application/json; odata=verbose" },
    success: function (data) {
        var items = data.d.results;
        items.forEach( function(item) { 
                //some function
        });
    },
    error: function (data) { alert("ERROR: " + data); 
                            console.log(sharepointScenarioListUrl + 
                            abcUrl);console.log(data);
                           }
} );

3 个答案:

答案 0 :(得分:1)

一个简单的改变可以解决这个问题:

function firstCall()
{
        var url;
    var abcUrl;
        $.ajax( {
                url: sharepointBaseUrl + "_api/web/currentUser/groups?$select=title",
                method: "GET",
                headers: { "Accept": "application/json; odata=verbose" },
                success: function (data) {
                    var items = data.d.results;
                    for (var i = 0, len = items.length; i < len; i++) {
                        if (items[i].Title == adminGroupName) { 
                         self.currentUserIsAdmin(true); 
                         abcUrl="Some Url1";
                        }
                        else{
                         abcUrl="Some Url2";
                        }
                   }
                   secondCall(abcUrl);
                },
                error: function (data) { alert("ERROR: " + data) }
        } );
 }       
        function secondCall(abcUrl)
        {
        $.ajax( {
            url: sharepointScenarioListUrl + abcUrl,
            method: "GET",
            headers: { "Accept": "application/json; odata=verbose" },
            success: function (data) {
                var items = data.d.results;
                items.forEach( function(item) { 
                        //some function
                });
            },
            error: function (data) { alert("ERROR: " + data); 
                                    console.log(sharepointScenarioListUrl + 
                                    abcUrl);console.log(data);
                                   }
        } );

        }

答案 1 :(得分:0)

我相信abcUrl是未定义的,因为第二个AJAX调用是在第一个AJAX调用返回之前发生的;由于abcUrl从未在代码中初始化,因此未定义。如果你想确保第二个AJAX调用只在第一个AJAX调用返回后发生,你可以在第一个AJAX请求的成功回调中放置第二个ajax调用。

答案 2 :(得分:0)

您可以使用jquery whendeferred方法。

伪将是这样的:

//get URL for account type
getAccountURL()
    //when done return URL
    .done(function(url){
        //get sharepoint URL
        getSharePointURL(url)
    };