2009-08-04 3 views
0

작은 기능을 구현하고 있습니다.JavaScript 비동기 콜백 @ http 게시 대기 중

제가

는 사용자가 기능 해봐요이 호출 버튼을 클릭
<input type="submit" value="My Button" onclick="javascript:DoSomething();" /> 

로 어떤 동작을 실행할 수있는 버튼을 갖는다. 폼 필드에 도시 ​​이름을 기록 비동기 동작을 수행하는 콜백 함수가 정의 된 함수 내부

function DoSomething() 
    { 
     var geocoder = new GClientGeocoder(); 
     geocoder.getLocations(map.getCenter(), function SetField(response) 
      { 
      if (!response || response.Status.code != 200) 
      { 
       alert("Status Code:" + response.Status.code); 
      } 
      else 
      { 
       var place = response.Placemark[0]; 
       $('#someHiddenField')[0].value = place.AddressDetails.Country.CountryNameCode; 
      } 
      }); 
} 

. 문제는 비동기 콜백이 페이지를 게시 한 후에 필드에 쓰려고한다는 것입니다. 포스트 프로세스가 콜백 결과를 기다리도록 할 수 있습니까? 콜백은 Google Maps API에 정의되어 있으므로이를 피할 수는 없습니다.

<input type="submit" value="My Button" onclick="javascript:return DoSomething();" /> 

은 그런 거짓 그래서 SUMIT이 경우 취소됩니다 돌아가려면 해봐요 기능을 수정 사전

답변

1

최초의

덕분에 그렇게 같이 return 문을 포함하도록 온 클릭 핸들러 코드를 수정할 그것은 비동기 콜백에서 작동하고 있습니다. 그리고 완료되면 비동기 콜백을 수정하여 양식을 게시하십시오.

function DoSomething(doPost) 
{ 
     var geocoder = new GClientGeocoder(); 
     geocoder.getLocations(map.getCenter(), function SetField(response) 
      { 
      if (!response || response.Status.code != 200) 
      { 
       alert("Status Code:" + response.Status.code); 
      } 
      else 
      { 
       var place = response.Placemark[0]; 
       $('#someHiddenField')[0].value = place.AddressDetails.Country.CountryNameCode; 

       // resubmit the form here 
       $('#yourFormID').submit(); 
      } 
      }); 

     return false; // cancel the submitting of the form 
} 

또 다른 방법은 onSubmit 핸들러에게 양식에을 포함하고 양식의 제출을 ​​허용 할 것인지를 결정하기 위하여 글로벌 플래그를 사용하는 것 (즉, 더 비동기 콜백 비행에 아직 존재하지 않는 경우). 비동기 콜백 반환 할 때이 플래그를 지우 것이며 나는 () 메소드에게 폼 요소를 제출 호출, 위의 증명과 같은 자바 스크립트에서 양식을 다시 제출하십시오.

+0

해머 타임;) 그러나 트릭을 가져올 수 있습니다. – Dante

+0

감사합니다, 매력처럼 작동합니다;) – Dante

+0

그냥 작은 메모 : 단추로 형식을 변경하고 함수에서 돌아 오지 마십시오. 그것은 두 대답 사이의 융합입니다. – Dante

0

제출 단추 대신 일반 단추 (유형 = "단추")를 사용하여 양식을 게시하지 마십시오. 대신 콜백 함수에서 양식을 게시하십시오.