如何向服务器发出请求并释放JavaScript以继续处理

如何向服务器发出请求并释放JavaScript以继续处理,javascript,html,jquery,dom,Javascript,Html,Jquery,Dom,有没有一种方法可以发出请求并释放JavaScript和HTML来完成它们自己的事情,让服务器在完成之前完成它的事情,在这一点上,事件会获取JavaScript的控制权,将数据转储到指定的接收端并结束调用 我使用此方法调用Python function par_makeHttpObject() { try { return new XMLHttpRequest(); } catch (error) {} try { return ne

有没有一种方法可以发出请求并释放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分钟

任何想法都将不胜感激

DK

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

$.ajax({
  type: "POST",
  url: "../getFdList?Fds=allFds"
}).done(function( msg ) {
  alert( "Response: " + msg );
});
这样,您就可以调用
ajax()
,为它提供回调函数,并继续执行您需要执行的任何其他处理


jQuery的另一个优点是它可以很好地跨浏览器使用,不需要任何努力。

是的,事实上它非常简单。将打开调用中的最后一个参数更改为“true”: (这是我从w3schools网站上得到的(是的,我知道网站的坏名声,这只是一个例子))


AJAX最棒的部分是能够在异步发出HTTP请求时继续处理其他内容

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

另请参见:

标记jQuery,但不使用jQuery。您可以轻松地使用
$.ajax()
并利用
success:function(){}
在请求完成时处理回调。它将允许你继续你想要的。更不用说,它规范了跨浏览器compatability@Ohgodwhy你有没有这样做请求的示例代码?当然,大约有一整页的价值-@Ohgodwhy Thanx,我现在就读。啊@Zachrip,这就是这个选项的意义?但是我是否需要重新访问并检查调用是否准备好返回,或者我是否需要准备一些响应对象来处理服务器应答事件?@DeKoss我从w3schools中添加了一个更好的示例。没有必要进行规范化,因为OP使用的函数已经在其代码的第一行中处理了它,如果您阅读了问题的话<代码>函数par_makeHttpObject(){。他只需要readystatechange。@Ohgodwhy'这只是一个例子。我知道w3schools很糟糕,我只需要一个例子,不管它来自哪里,这个代码示例都很好。伙计们,感谢你们的这些优秀见解。我以为这会是一只斗牛犬,但它看起来像一只法国贵宾犬。我要去测试一下所有这些想法。谢谢大家!噢!@Jack,我想我明白了。所以,这就像是一个随时准备接受回应的听众……我一定会尝试一下,让你知道。但我认为这应该奏效……谢谢……谢谢。这看起来和Jack的有点不同,但我想我也明白这是怎么回事。非常有趣。
$.post('../getFdList?Fds=allFds', {}, function(response) {
    var dta = response.split("\n");
    // ...
}, 'text');
// continue doing something else here