根据 if 条件选择 AJAX URL


我有两个 AJAX

请求,我想根据用户是否是管理员来更改第二个 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);
                           }
} );

一个简单的更改可以解决此问题:

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);
                                   }
        } );
        }

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

你可以

使用 jquery whendeferred 方法。

伪将是这样的:

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

最新更新