2016-10-03 64 views
0

我正在嘗試開發一個組件,它可以將不同數量的AJAX請求發送到不同的URL。以下是它的作用:在Polymer中動態生成AJAX請求

  1. 發出初始請求以獲取用戶所屬的組。

  2. 當初始請求完成時,請爲每個返回的組發出請求。該請求的URL包含在對初始請求的響應中返回的組ID。

  3. 隨着每個組請求的完成,以及組數據到一個數組屬性。

  4. 當所有組請求都完成時,請設置一個布爾屬性,以便「加載」指示器隱藏。

這對於jQuery來說很簡單。您只需在步驟2中爲每個組調用$ .ajax。對於步驟4,您將由$ .ajax調用返回的所有Deferred對象傳遞給$ .whenAll。

很明顯,如何用iron-ajax做第1步。我正在尋找一個如何完成聚合物中第2步和第4步的例子。我所見過的所有iron-ajax示例都會對URL進行硬編碼的服務執行一次ajax請求。你如何做一個可變數量的請求,其中的URL是在運行時確定的?

感謝, 丹尼斯

回答

1

首先,我會鼓勵這條道路,你不僅限於聲明方式與聚合物的工作。您可以使用fetch API和Promises輕鬆編寫類似於$ .ajax的代碼。基本上有window.fetch而不是$.ajaxPromise.all而不是$.whenAll

MDN聲稱它尚未標準化,但polyfill實現提供了一個穩定的解決方案。

如果您確實想要使用iron-ajax,您可以將其與動態值綁定並在dom-repeat內迭代結果。

<iron-ajax url="[[groupsUrl]]" 
      auto 
      handle-as="json" 
      last-response="{{userGroups}}"></iron-ajax> 

<template is="dom-repeat" items="[[userGroups]] as="group"> 
    <iron-ajax url="/api/base/url/{{group.id}}" 
      auto 
      on-response="handleGroup"></iron-ajax> 
</template> 

最後,在handleGroup函數中可以填充數組屬性。設置布爾加載標誌將是icky雖然。您告訴所有請求已完成的唯一方法是計算事件處理程序觸發多少次。 Promise.all在這方面肯定是比較乾淨的。

+0

最後,作爲一般建議,不要只在您的回覆中發送該ID到第一個電話。如果服務器包含完整的URL,您的生活將變得更加輕鬆。 –