2011-11-21 136 views
0

在我的JS中,我發送一個get請求到bit.ly api來縮短URL。問題是我需要返回在代碼中使用的URL。XMLHttpRequest同步或異步

最好爲此使用同步請求嗎?由於它代表使用bit.ly的XHR請求之後的任何代碼都會失敗,因爲響應尚未返回短URL。

bitlyXHR.onreadystatechange = function() { 
    if (bitlyXHR.readyState == 4) { 
     if (bitlyXHR.status == 200) { 
      var obj = JSON.parse(bitlyXHR.responseText); 
      // Do something 
     } 
    } 
}; 

bitlyXHR.open("GET", "http://api.bitly.com/v3/shorten?login=&apiKey=&longUrl=" + longURL + "&format=json"); 
bitlyXHR.send(); 

// Some code here that uses the short URL 
+0

只需將「這裏使用短URL的一些代碼」而不是「做某事」的代碼。 –

+0

同步阿賈克斯是魔鬼。從不使用它。 – Raynos

+0

儘管可以使用(或模仿)同步AJAX(XMLHTTPRequest),但由於許多原因它不是理想的,但其主體是Javascript的處理時間有限。因此,如果該過程需要更多時間才能返回,那麼Javascript將掛起一條消息,指出該腳本花費的時間太多(幾乎在所有瀏覽器中,除了Iexplorer)。 – magallanes

回答

2

你可以做這樣的事情:

function doSomething(obj) { 
    // this does something with the result. 
} 

bitlyXHR.onreadystatechange = function() { 
    if (bitlyXHR.readyState == 4) { 
     if (bitlyXHR.status == 200) { 
      var obj = JSON.parse(bitlyXHR.responseText); 
      doSomething(obj); 
     } 
    } 
}; 

bitlyXHR.open("GET", "http://api.bitly.com/v3/shorten?login=&apiKey=&longUrl=" + longURL + "&format=json"); 
bitlyXHR.send(); 
0

移動使用短網址到具有做一些評論或代碼的部分代碼,甚至更好,呼叫函數包含那裏的代碼。

這樣做使用回調被稱爲。您提供稍後請求返回時執行的函數。這是處理AJAX(畢竟A代表異步)請求的最好方法,因爲它在等待完成調用時不會鎖定瀏覽器。