2012-07-05 2 views
0

코드 숨김 파일에서 메서드를 평가하는 표현식이 <%= GetAddPinScript() %>입니다. 이 방법은 다음 반환 자바 스크립트를 생성 AddPushpin('data', 'more data', numbers, numbers, 'no');자바 스크립트에서 인라인 식을 실행하기 전에 기다리는 방법

열쇠는 여기에 'no' 코드 숨김 방법으로 삽입 된 변수가 어떤 콘텐츠를 표시하거나 안하면 내 자바 스크립트의 나머지 부분이 결정하는 데 도움이 있다는 것입니다 (기본적으로합니다. BOOL)

제가하는 데 문제는 내에서 방법 코드 숨김 표현이를 결정하기 위해 평가 전에 아약스 호출 를 통해 전송되는 변수 (아래 코드에서 result)를 필요로한다는 것입니다 자바 스크립트에서 생성 할 올바른 변수 -하지만 표현식은 항상 페이지로드에서 평가됩니다.

그렇다면 아약스 호출을하기 전에 표현식을 평가하지 못하게하려면 어떻게해야합니까?

자바 스크립트

function displayGeneralInfo(specifics) 
    { 
    var callback = AddQueryString(window.location.href, "action", "displayResults"); 
    $.ajax({ 
      url: callback, 
      type: "POST", 
      async: false, 
      data: { 
       specifics: specifics 
       } 
       }); 
       <%= GetAddPinScript() %> 
    } 

과 AddPushpin 기능

function AddPushpin(name, description, latitude, longitude, selected) { 
    // Add a pin to the map 
    var center = new Microsoft.Maps.Location(latitude, longitude); 
    var pin = new Microsoft.Maps.Pushpin(center, null); 

    if(selected !== null || selected!="") 
     { 
     if(selected == "yes") 
     { 
     infoboxOptions = new Microsoft.Maps.Infobox(center, 
     {       width: 285, 
           height: 170, 
           visible:true, 
           actions:[{label: 'Associate', eventHandler: associate}] 
           }); 
           map.entities.push(infoboxOptions); 
     } 
    } 
    map.entities.push(pin); 
} 

및 코드 숨김, AJAX 호출이 완료된 후 실행 추가 핀 스크립트를 가지려면

public string GetAddPinScript() 
    { 
foreach (Location location in foo(x => !string.IsNullOrWhiteSpace(x.Longitude) && !string.IsNullOrWhiteSpace(x.Latitude))) 
     { 
      selected = "no"; 
      if (!result.IsNullOrEmpty()) 
      { 
       if (location.MapPinDescription.IndexOf(result) > 0) 
        selected = "yes"; 
      } 
      pins.Add(string.Format("AddPushpin('{0}', '{1}', {2}, {3}, '{4}');", 
       location.etc1("'", @"\'"), location.etc2("'", @"\'"), location.etc3, location.etc4, selected)); 
      string retVal = string.Join("\n", pins.ToArray()); 
      return retVal; 

답변

0

기다릴 수 없습니다. javascript는 클라이언트에서 실행되며이 함수는 서버에서 실행됩니다. Asp.net은 클라이언트에 데이터를 보내기 전에 바인딩을 모두 수행하므로 클라이언트에서 일부 코드가 실행될 때까지 기다린 다음이 함수를 실행할 방법이 없습니다. 서버에 ajax 호출이있을 때이 함수를 호출하는 것이 좋습니다. 이 함수에서 일부 html을 반환하고 html에 success 함수를 포함시킵니다.

+0

감사합니다. 벽에 머리를 대고 대답을 찾으려고했습니다. ajax 호출에서 함수를 반환하고 실행시킬 수 있습니까? –

+0

ajax 호출에서 함수를 실행할 수 있습니다. 당신의 나머지 API가 몇몇 html를 돌려 보내고 당신의 성공 함수에서 다만 그 html를 당신의 페이지 html에서 두십시오. 예를 들면. url/xyz에 ajax 호출을하면이 요청은 컨트롤러의 일부 동작에 의해 처리됩니다. 이 액션에서 GetAddPinScript 함수를 호출 한 다음 . 그렇다면 아작스의 성공 함수에서 본문 태그의 끝에이 스크립트 태그를 추가하십시오 –

+0

감사합니다. –

0

스 니펫 ajax 호출의 전체 처리기로 설정해야합니다 :

function displayGeneralInfo(specifics) 
{ 
var callback = AddQueryString(window.location.href, "action", "displayResults"); 
$.ajax({ 
     url: callback, 
     type: "POST", 
     async: false, 
     data: { 
      specifics: specifics 
      } 
      }, 
     complete: <%= GetAddPinScript() %> 
}); 

위 구문은 GetAddPinScript이 기존 함수의 이름이나 익명 함수 블록의 이름을 반환한다고 가정합니다.

관련 문제