2013-02-09 2 views
1

웹 서비스를 사용하여 선택 목록을 채우는 경우 동일한 선택 방법을 사용하여 코드 수를 제한하고 시도하는 것이 이상적입니다. 여기에 내 웹 서비스 호출을 만들기 위해 사용하는 방법입니다 :배열을 자바 스크립트 함수로 전달

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

+1

예, SYNCHRONOUS AJAX CALLS를 사용하지 마십시오. 정말 엉망이됩니다. 거의 100 % 보장됩니다. 콜백에있는 모든 것을 수동으로 중첩하거나, 또는 콜롬의 비동기 라이브러리를 사용하여 콜백을 관리하십시오 (https://github.com/caolan/async). – sajawikio

+1

배열을 함수로 전달하려면 myfunction (myarray)을 사용하면됩니다. 그러나 귀하의 경우 왜 선택 목록의 배열을 가지고, 그 배열을 반복하고 각 선택 항목에 대해 원하는 모든 함수를 호출해야합니까? caolan의 비동기 라이브러리를 사용하면 async.forEachSeries 및/또는 async.waterfall을 사용하여 순서가 비동기 적으로 완료되고 비동기 적으로 완료 될 때까지 기다릴 수 있습니다. – sajawikio

답변

0
당신의 변명로부터 팁을 들어 어떤

1) 야 다른 사람들은 특히 백엔드가 처리 속도가 느리거나 지저분한 UI 요구 사항이있는 경우 동기화 호출을 절대로 사용하지 마십시오.

2) 클로저를 정리하고 개체의 메서드 범위를 지정하는 방법을 배우면 문제를 해결할 수 있지만 좋을 것입니다. 올바른 방향을 알려줍니다.

3)이 기능에 대한 참조를 전달하고 객체의 메소드에 대한 참조를 전달하지 않으므로 간단하게 작동하지 않습니다. self (WTF는 시맨틱에 대해 들어 봤습니까?) 옆에있는 목록은 손실 된 함수입니다. 개체 범위 및 문제가있는 곳입니다!

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

도움이 되길 바랍니다.

+0

치료를 한 것 - 감사합니다 :) – user2025399

관련 문제