同一个js文件的多个http请求

时间:2015-11-02 10:08:48

标签: javascript jquery xmlhttprequest multiple-instances

我的文件js调用多个http请求时出现问题。 我有一个按钮,调用我的文件visualizzaReport.js

中的VisualizzaReport函数

这是函数VisualizzaReport(select是用户的ID)

    function visualizzaReport(select){
        reportUtente(select)
        loadPianificazione(select)
    }

这里的函数reportUtente(select)

    function reportUtente(select) {
        var url = "../loadReportUtenteServlet?";
        url += "type=perso_atti&value=" + select.value;
        xmlhttp.onreadystatechange = handlerForReportUtente;
        xmlhttp.open("GET", url);
        xmlhttp.send("");

    }

这里的函数loadPianificazione(选择)

    function loadPianificazione(select) {
        var url = "../loadPianificazione2Servlet?";
        url += "type=pianificazioni&value=" + select.value;
        xmlhttp.onreadystatechange = handlerForPianificazioneUtente;
        xmlhttp.open("GET", url);
        xmlhttp.send("");
    }

我的问题是函数reportUtente已启动但尚未生效,因为它似乎被loadPianificazione函数替代。 我怎样才能在reportUtente完成执行时调用loadPianificazione?

2 个答案:

答案 0 :(得分:0)

在您的情况下,我建议您使用 jQuery AngularJs 来实现此目的。

jQuery 示例:

$.get('url1.com', function(){
    $.get('url2.com');
})

只有在第一次请求完成后,您才会请求 url2.com

答案 1 :(得分:0)

您似乎正在使用单个全局xmlhttp变量。

然后你调用两个用它做事的函数。第二个请求将在第一个请求完成之前覆盖xmlhttp.onreadystatechange,因此您将为每个请求调用第二个函数。

不要这样做。为每个请求创建一个XMLHttpRequest的新实例,并将其保存在本地范围内,这样它就不会干扰其他实例。

function reportUtente(select) {
    var url = "../loadReportUtenteServlet?";
    url += "type=perso_atti&value=" + select.value;

    var xmlhttp = new XMLHttpRequest(); // New instance here

    xmlhttp.onreadystatechange = handlerForReportUtente;
    xmlhttp.open("GET", url);
    xmlhttp.send("");

}

您尚未共享handlerForReportUtente,但它应该类似于:

function handlerForReportUtente() {
    alert(this.responseText); // Use `this` to get the right XHR object
}