2013-02-09 75 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