2012-07-17 6 views
1

누군가가 나를 도울 수 있기를 바랍니다.자바 스크립트가 AS3 플래시로 데이터를 반환하지 않습니다.

protected function doIt():void 
    { 
     if (ExternalInterface.available) { 
      var retData:String; 
      retData = ExternalInterface.call("returndata"); 
      if(retData != null) { 
       eidLbl.text = retData.toString(); 
      } else { 
       eidLbl.text = "Returned Null"; 
      } 
     } else { 
      eidLbl.text = "External Interface not available"; 
     }     
    } 

을하고는 자바 스크립트 함수 다음은 호출 : 나는 AS3를 사용 FlashBuilder 4에서 다음과 같은 기능을 가지고 나는 내 사이트에서 다음을 실행하면 모든 것이 잘 작동

var fql_query = "some query format"; 
function returndata(){ 
    return fql_query; 
} 

! 플래시 파일은 javascript 함수를 호출하고 적절한 텍스트 필드에 "일부 쿼리 형식"을 반환합니다.

protected function doIt():void 
{ 
    if (ExternalInterface.available) { 
     var retData:String; 
     retData = ExternalInterface.call("runFQL",uidLbl.text); 
     if(retData != null) { 
      eidLbl.text = retData.toString(); 
     } else { 
      eidLbl.text = "Returned Null"; 
     } 
    } else { 
     eidLbl.text = "External Interface not available"; 
    }     
} 

을 다음과 같은 자바 스크립트 함수 : 나는이 하나를 실행할 때

, 그것은 ID를 전달
function runFQL(id){ 
    var user_id = id; 
    var page_id = "**********"; // the page id that is actually there is valid 
    var fql_query = "SELECT uid FROM page_fan WHERE page_id="+page_id+" and uid="+user_id; 

    FB.api({ 
     method: 'fql.query', 
     query: fql_query 
    }, 
    function(response){ 
     if (response[0]) { 
       var uid = response[0].uid; 
       window.alert(uid); //100001632043058 
       return uid; 
     } else { 
       window.alert("return 1000"); 
     } 
    });  
}; 

내 문제가 있음을 내 플래시 기능을 변경하는 경우 다음과 같이

그러나이 될 수 있습니다 에서 쿼리를 실행하고 uid를 정확하게 되 돌리면서 경고에 표시하지만 (여기에 내 문제 임) 반환시 플래시로 다시 전달하지 않습니다. 매번 null 또는 undefined로 반환됩니다.

누구나 내가 누락 된 부분을 말할 수 있습니까? 나는 수 시간 동안 구글을 수색 해왔다.

답변

0
function(response){ 
    if (response[0]) { 
     var uid = response[0].uid; 
     window.alert(uid); //100001632043058 
     return uid; 
    } else { 
     window.alert("return 1000"); 
    } 
}); 

runFQL을 호출 할 때 FB.api 함수가 완료되지 않을 때 호출됩니다. 따라서 runFQL은 매번 실행되고 undefined를 반환합니다.

FB.api 호출이 플래시 응용 프로그램에서 함수를 호출하고 거기에 반환 값을 전달하면 수행 할 수있는 작업입니다. 그래서 기본적으로 Flash에서 ExternalInterface.addCallback을 수행하고 javascript에서 해당 함수를 호출합니다.

function runFQL(id){ 
    var user_id = id; 
    var page_id = "**********"; // the page id that is actually there is valid 
    var fql_query = "SELECT uid FROM page_fan WHERE page_id="+page_id+" and uid="+user_id; 

    FB.api({ 
     method: 'fql.query', 
     query: fql_query 
    }, 
    function(response){ 
     if (response[0]) { 
       var uid = response[0].uid; 
       window.alert(uid); //100001632043058 
       // needs ExternalInterface.addCallback("sendDataBack",handleData); in your 
       // as3 code 
       yourSwf.sendDataBack(uid); 
     } else { 
       window.alert("return 1000"); 
     } 
    });  
}; 
+0

바리에게 감사하지만 이해할 수 있는지 잘 모르겠습니다. runFQL 함수를 실행하는 버튼을 클릭하면 FB.api를 처리하고 매회 uid의 경고를 반드시 누락시킵니다. 실패한 것은 단지 수익입니다. – Cenapps

+0

이제는 runFQL 함수를 호출하면 명령문을 살펴보고 하나씩 차례로 실행합니다. FB.api는 비동기 호출을 수행하므로 FB.api 함수가 호출되고 runFQL 함수가 종료 된 후 실행이 계속되고 runFQL의 끝에 return 문이 없으므로 항상 undefined를 반환합니다. 이제 "fql.query"가 완료되면 FB.api로 전달하는 함수가 호출되므로 경고가 표시됩니다. 이 함수는 runFQL이 완료된 후에 호출됩니다. –

0

작업 흐름에 문제가 있습니다. JavaScript 코드에서 FB API를 호출하면 함수가 끝납니다.이 경우 아무 것도 반환되지 않으므로 undefined를 반환합니다. 그러나 API가 응답을 얻지 못했기 때문에 이름없는 함수가 실제로 호출되지 않았을 때 반환 함수가 무엇인지 생각하고 있습니다. 다음 코드 줄을 변경하면됩니다.

return uid; 

myHTMLFlashObject.someFunctionName(uid); 

와 플래시 프로젝트에서 당신은 기능 someFunctionName를 추가하고 ExternalInterface를 콜백 함수로 추가해야합니다.
API는 비동기 적이 지 않으므로 API가 응답을 보내기 전에 runFQL 함수가 정의되지 않은 값을 반환 할 것으로 기대할 수 있습니다.

+0

설명해 주셔서 감사합니다.바리스가 나에게 보낸 것을 구현할 수 있었고 모든 것이 훌륭하게 작동했습니다. 왜 그랬는지 이해하지 못했습니다. – Cenapps

관련 문제