我有以下功能:
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 $ .get来解析一个URL,如果我在没有函数的情况下执行它会正常工作,但该函数将返回空字符串。显然,我做错了什么,但我不知道是什么;任何帮助都将受到高度赞赏。
答案 0 :(得分: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 ... */ });
欢迎来到异步意大利面世界:)
答案 1 :(得分:3)
当$.get
返回时,您需要传入一个要调用的函数。类似的东西:
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);
});
}
然后你可以用:
来调用它parseLink('foo', function (newlink)
{
//Stuff that happens with return value
}
);
答案 2 :(得分:0)
因为.get()
异步操作,parseLink()
继续执行并在AJAX调用返回之前返回空newlink
。
您需要触发回调中使用newlink
的任何内容,这可能需要您稍微重新考虑您的实现。接下来会发生什么(填充的newlink
会发生什么?)