2017-06-19 84 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