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

How to do a request to the server and liberate JavaScript to continue processing

本文关键字:JavaScript 释放 继续 处理 请求 服务器      更新时间:2023-09-26

是否有一种方法可以发出请求并释放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那里得到了这个(是的,我知道这些网站的不良代表,这只是一个例子)

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();
}

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

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

另请参阅:$.post()