2013-02-09 100 views
1

我正在使用Web服務來填充選擇列表,現在我需要對多個選擇列表執行相同的操作,理想情況下使用相同的方法嘗試和限制代碼量。下面是我使用,使我的Web服務調用的方法:將數組傳遞到Javascript函數

function GetColourReferences(self) { 
    $.ajax({ 
     async: false, 
     cache: false, 
     type: 'GET', 
     url: '/GetColourReferences', 
     success: function (data) { 
      self.colourReferences(data); 
     } 
    }); 
} 

我已經試過類似下面的內容,但我不能得到它的工作 - 是它甚至可能嗎?

function GetReferences(self, list, refUrl) { 
    $.ajax({ 
     async: false, 
     cache: false, 
     type: 'GET', 
     url: refUrl, 
     success: function (data) { 
      list(data); 
     } 
    }); 
} 

以下是我會打電話給它(我使用淘汰賽):

GetReferences(self, self.colourReferences, '/GetColourReferences'); 

爲尋找謝謝:)

+5

一般說明。你永遠不會(永遠不會*,永遠不會*,**永遠**)使用同步的Ajax調用。忘記它們存在。 – Tomalak 2013-02-09 21:08:35

+1

是的,不要使用SYNCHRONOUS AJAX CALLS他們真的會把你搞砸,這幾乎是100%的保證。要麼手動嵌套回調中的所有內容,並且/或者使用caolan的異步庫來管理回調:https://github.com/caolan/async。 – sajawikio 2013-02-09 21:20:22

+1

要將數組傳遞給函數,只需執行以下操作:myfunction(myarray)。但在你的情況下,爲什麼你不只是有一個選擇列表的數組,然後遍歷該數組,然後調用每個選擇所需的任何函數?您可以使用caolan的異步庫,通過使用async.forEachSeries和/或async.waterfall,確保這是異步並按順序完成的(即等待異步完成後再執行下一步)。 – sajawikio 2013-02-09 21:22:30

回答

0

1)多德無論你的藉口傾聽來自提示其他人永遠不會使用同步呼叫,特別是如果您的後端處理速度慢或者您有一些混亂的用戶界面要求。

2)整理你的閉包,學習如何確定一個對象的方法,你會解決你的問題,但我會很好,並指出你在正確的方向。

3)這不起作用僅僅是因爲你傳遞函數的引用而不是對象的方法的引用,所以巧妙地稱爲自我(WTF你有沒有聽說過語義)那個備用列表是失去了功能對象的範圍和這是問題所在!

function GetReferences(self, list, refUrl) { 
    $.ajax({ 
     async: false, 
     cache: false, 
     type: 'GET', 
     url: refUrl, 
     success: function (data) { 
      list.call(self, data); 
     } 
    }); 
} 

希望有所幫助。

+0

工作過一次 - 謝謝:) – user2025399 2013-02-16 00:26:58