簡體   English   中英

$ .get的javascript函數不會返回值

[英]javascript function with $.get won't return value

我有以下功能:

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,如果我不使用函數就可以正常工作,但是該函數將返回空字符串。 顯然我做錯了,但是我不知道是什么。 任何幫助將不勝感激。

$ .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 ... */ });

歡迎來到異步意大利面世界:)

$.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
  }
);

由於.get()異步操作,因此parseLink()繼續執行並在AJAX調用返回之前返回空的新newlink

您需要從回調中觸發對newlink進行任何處理,這可能需要您重新考慮一下實現。 接下來是什么(填充的newlink發生什么情況)?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM