2011-12-20 2 views
2

나는 다음과 같은 기능이 있습니다

function parseLink(link){ 
var newlink=""; 

$.get(link, 
    function(data){  

    startoffset = data.indexOf("location.replace") + 18; 
    endoffset = data.indexOf("tiny_fold = 1;") - 8; 
    newlink= data.substr(startoffset,(endoffset-startoffset)); 


}); 

return newlink; 

} 

내가 그것을 할 경우 기능이없는 잘 작동하는 URL을 구문 분석 JQuery와 $ 갔지을 사용하고 있습니다를 함수는 빈 문자열을 반환합니다. 분명히 내가 뭔가 잘못하고있다. 그러나 나는 무엇을 모른다. 어떤 도움을 주시면 감사하겠습니다.

+0

가 다른 도메인의 URL을 요청 :

function parseLink(link, callback) { $.get(link, function(data) { startoffset = data.indexOf("location.replace") + 18; endoffset = data.indexOf("tiny_fold = 1;") - 8; var newlink= data.substr(startoffset,(endoffset-startoffset)); callback(newlink); }); } 

은 다음 당신은 그것을 호출 할 수 있습니다? – isNaN1247

+0

가능한 복제본 [자바 스크립트 콜백 - 결과를 반환하는 방법?] (http://stackoverflow.com/questions/6453295/javascript-callback-how-to-return-the-result) – hugomg

+0

아니요, 같은 도메인에서 왔습니다. URL은 "비동기 스파게티"에 대한 보안 키 – isJustMe

답변

3

$.get이 반환 될 때 호출 할 함수를 전달해야합니다. 같은 뭔가 :

parseLink('foo', function (newlink) 
    { 
    //Stuff that happens with return value 
    } 
); 
3

$ .get 호출이 비동기입니다. 제어 흐름을 참조하여 다음과 같이이다 :

parseUrl("http://www.test.com") 
$.get(..., function callback() { /* this is called asynchronously */ }) 
return ""; 
... 
// sometime later the call to $.get will return, manipulate the 
// newLink, but the call to parseUrl is long gone before this 
callback(); 

내가 당신이해야 할 무엇을 의미하는지 생각하십시오 .get()가 비동기 적으로 동작하기 때문에

function parseUrl(link, whenDone) { 
    $.get(link, function() { 
     var newLink = ""; 
     // Do your stuff ... 
     // then instead of return we´re calling the continuation *whenDone* 
     whenDone(newLink); 
    }); 
} 

// Call it like this: 
parseUrl("mylink.com", function (manipulatedLink) { /* ... what I want to do next ... */ }); 

에 오신 것을 환영합니다

+0

+1을 생성하기 위해 백엔드로 전송됩니다. – James

+0

어쨌든 ... 어쨌든 jQuery를 사용하고 있기 때문에 http://api.jquery.com/jQuery.when/에서 살펴볼 수 있습니다. 당신이 그것의 주위에 당신의 머리를 얻는다면 그것은 좀 더 쉽고 (더 선형 적으로) 나는 생각한다. – mfeineis

0

을 스파게티 세계를 :) 비동기하기 위해, parseLink()은 전달 실행시 AYAX 호출이 반환되기 전에 빈 newlink을 반환합니다.

newlink과 관련된 모든 작업을 콜백에서 트리거해야하므로 구현을 조금 재고해야 할 수도 있습니다. 다음에 오는 것은 무엇입니까 (인구는 newlink일까요?)