2013-07-01 61 views
2

有沒有辦法讓請求和解放JavaScript和HTML來做他們自己的事情,讓服務器完成它的任務直到它完成,在這一點上一個事件抓取JavaScript的控制權,將數據轉儲到指定的接收端並結束呼叫?如何向服務器發出請求並釋放JavaScript以繼續處理

我用這個方法調用的Python

function par_makeHttpObject() { 
    try { 
     return new XMLHttpRequest(); 
    } 
    catch (error) {} 
    try { 
     return new ActiveXObject("Msxml2.XMLHTTP"); 
    } 
    catch (error) {} 
    try { 
     return new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    catch (error) {} 
    throw new Error("Could not create HTTP request object."); 
} 

我叫它如下:

... 
var request = par_makeHttpObject(); 
request.open("POST", "../getFdList?Fds=allFds", false); 
request.send(); 
var dta = request.responseText.split("\n"); 
var cnt = 0; 
for (var x in dta) { 
    try {eval(dta[x]);} 
    catch (error) {alert("JS Error - check JS part of syntax!\n" + dta[x]);} 
} 
... 

的問題是,JavaScript的坐着等待對請求的答覆,用戶可以正在做別的事情。有些電話需要5分鐘...

任何想法,將不勝感激。

DK

+3

jQuery的標籤,但不使用jQuery。你可以很簡單地使用'.ajax()'並利用'success:function(){}'來處理請求完成時的回調。它會讓你繼續你想要的。更何況,它正常化跨瀏覽器兼容性 – Ohgodwhy

+0

@Ohgodwhy你有這樣的請求的任何示例代碼? – DeKoss

+0

當然,關於整個頁面的價值 - [$ .ajax()](http://api.jquery.com/jQuery.ajax/) – Ohgodwhy

回答

2

使用jQuery的ajax()功能,而不是滾動您自己的Ajax解決方案。 ajax()默認爲異步請求,這樣你就可以將它傳遞了一個名叫要求完成功能:

$.ajax({ 
    type: "POST", 
    url: "../getFdList?Fds=allFds" 
}).done(function(msg) { 
    alert("Response: " + msg); 
}); 

這樣的話,你可以打電話ajax(),給它你的回調函數,與任何其他處理則需要進行去做。

jQuery的另外一個優點是,它非常好的跨瀏覽器而不需要任何努力。

+0

謝謝。這看起來與傑克有些不同,但我想我明白這是如何工作的。很有意思。 – DeKoss

2

是的,這實際上很容易。改變最後一個參數在公開徵集「真」: (我把這個從W3Schools的(是的,我知道的網站壞名聲,這只是一個例子))

var xmlhttp; 
if (window.XMLHttpRequest) 
{// code for IE7+, Firefox, Chrome, Opera, Safari 
xmlhttp=new XMLHttpRequest(); 
} 
else 
{// code for IE6, IE5 
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.onreadystatechange=function() 
{ 
if (xmlhttp.readyState==4 && xmlhttp.status==200) 
{ 
      //THIS IS WHERE YOU GET THE SERVER RESPONSE 
    var response = xmlhttp.responseText; 
} 
} 
xmlhttp.open("GET","ajax_info.txt",true); 
xmlhttp.send(); 
} 
+0

啊! @Zachrip,那是什麼選項呢?但是,我是否需要重新訪問並檢查呼叫是否準備好返回,或者是否必須準備一些響應對象來處理服務器回覆事件? – DeKoss

+1

@DeKoss我從w3schools添加了一個更好的例子。 – Zachrip

+1

如果你閱讀了這個問題,就沒有必要去做規範化了,因爲OP使用了一個已經在他的代碼的第一行處理它的函數。 'function par_makeHttpObject(){'。他只需要readystatechange。[另外,關於爲什麼w3schools不好的強制性鏈接。](http://www.w3fools.com/) – Ohgodwhy

1

約最好的部分AJAX是在異步製作HTTP請求時繼續處理其他內容的能力。

$.post('../getFdList?Fds=allFds', {}, function(response) { 
    var dta = response.split("\n"); 
    // ... 
}, 'text'); 
// continue doing something else here 

參見:$.post()

+0

哦! @傑克,我想我明白這一點。所以,這就像是一個隨時準備接受迴應的聽衆......我一定會嘗試這個並讓你知道。但我認爲這應該工作...謝謝... – DeKoss

相關問題