2011-12-20 82 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; 

} 

我使用jQuery $不用彷徨分析一個URL,如果我去做了,工作正常無功能,但該函數將返回空字符串。顯然我做錯了什麼,但我不知道是什麼;任何幫助將不勝感激。

+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 2011-12-20 21:09:38

+0

可能重複的[Javascript回調 - 如何返回結果?](http://stackoverflow.com/questions/6453295/javascript-callback-how-to-return-the-result) – hugomg 2011-12-20 21:10:05

+0

不,來自同一個域該URL將被髮送到我的後端爲「異步意大利麪條」生成一個安全密鑰 – isJustMe 2011-12-20 21:12:37

回答

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(); 

我想你的意思做的是:

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 2011-12-20 21:19:50

+0

哦,順便說一下......既然你使用jQuery,你可以看看http://api.jquery.com/jQuery.when/。如果你頭腦發熱,它會更容易(更線性)讀取/寫入,我認爲... – mfeineis 2011-12-20 21:25:38

0

因爲.get()異步運行,parseLink()進行在AJAX調用返回之前執行並返回空的newlink

您需要從回調中觸發與newlink一起工作的任何內容,這可能需要您重新考慮一下您的實施。接下來會發生什麼(人口稠密的newlink)?