2

有没有办法发出请求并解放 JavaScript 和 HTML 来做自己的事情,让服务器做自己的事情直到它完成,此时事件会控制 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 分钟...

任何想法,将不胜感激。

丹麦

4

3 回答 3

2

使用 jQuery 的ajax()函数而不是滚动您自己的 AJAX 解决方案。ajax()默认为异步请求,因此您可以向它传递一个在请求完成时调用的函数:

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

这样,您可以调用ajax(),给它您的回调函数,然后继续您需要做的任何其他处理。

jQuery 的另一个优点是它可以轻松跨浏览器。

于 2013-07-01T23:37:39.130 回答
2

是的,事实上这很容易。将您的公开调用中的最后一个参数更改为“true”:(我从 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();
}
于 2013-07-01T23:37:47.293 回答
1

AJAX 最好的部分是能够在异步发出 HTTP 请求时继续处理其他事情。

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

也可以看看:$.post()

于 2013-07-01T23:40:31.517 回答