2017-06-19 64 views
0

我有两个AJAX请求,我想根据用户是否是admin来更改第二个AJAX的URL。如果用户不是管理员,则在AJAX调用中将使用不同的URL。我收到一个错误,说URL:abcUrl未定义。我知道我可能会拒绝投票提出这样一个问题,但我真的需要更新第二个Ajax网址,并且这对我来说将是一次学习体验,因为我是新的AJAX。任何帮助都非常感谢。根据条件是否选择ajax url

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

回答

0

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

+0

谢谢J.辰,你是对的。第二个AJAX调用在第一个之前执行。我在第一个AJAX的成功中放置了第二个AJAX,它的工作原理与它应该一样。 – dpr

+0

很高兴我能帮到你。 –

0

您可以使用jquery whendeferred方法。

伪会是这样:

//get URL for account type 
getAccountURL() 
    //when done return URL 
    .done(function(url){ 
     //get sharepoint URL 
     getSharePointURL(url) 
    }; 
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); 
            } 
     }); 

     } 
+0

谢谢你的回答艾伦,尽管我接受了J.陈的回答,两种解决方案都适用于我。 – dpr