2011-11-21 128 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代表异步)请求的最好方法,因为它在等待完成调用时不会锁定浏览器。