javascript - 在ajax内部调用ajax

标签 javascript jquery ajax

我正在尝试进行一个获取属性类型的 ajax 调用。然后我使用该类型将其传递给另一个 ajax 调用。我在异步执行此操作时遇到一些困难,因为我试图推迟到加载第一个属性为止。

function getEnt_PodType() {
    var ent_PodType;
    var oDataUrl = //URL to my data;
    return $.ajax({
        url: oDataUrl,
        type: "GET",
        async: true,
        beforeSend: function (xhr) {
            xhr.setRequestHeader("ACCEPT", accept);
        },
        success: function (xhr, textStatus) { 
            var res = xhr;
            if (res.d.results != undefined) {
                ent_PodType = res.d.results[0].Ent_PodType;
            }
            console.log("The ent pod type value is "+ ent_PodType);
            return ent_PodType;
        }
    });
}

function getProjects() {

    var QUERY_FILTER = getEnt_PodType().done(function (result) {
        "$filter=Ent_PodType eq '" + result + "'";
    });

    var url = restUrl + QUERY_FILTER;

    console.log("The url form getProjects is " + QUERY_FILTER);

    return $.ajax({
        url: url,
        type: "GET",
        async: true,
        beforeSend: function (xhr) {
            xhr.setRequestHeader("ACCEPT", accept);
        },
        success: function (xhr, textStatus) {
            projects = parseODataResultTest(xhr);
            return projects;
        }
    });

}

当我调用 getProjects() 时,我认为构建 url 会等待 getEnt_PodType() 返回其值,但它似乎不是这样工作的。

相反,它会继续执行 getProjects() 的其余部分。有什么办法可以异步执行此操作吗?

最佳答案

你的第二个ajax调用需要放在done Promise中。您可以将其余代码包装在本地函数中,并在done内部调用它,如下所示:

function getProjects() {

  function getProjectsViaAjax(){
     var url = restUrl + QUERY_FILTER;

     console.log("The url form getProjects is " + QUERY_FILTER);

     return $.ajax({
        url: url,
        type: "GET",
        async: true,
        beforeSend: function (xhr) {
            xhr.setRequestHeader("ACCEPT", accept);
        },
        success: function (xhr, textStatus) {
            projects = parseODataResultTest(xhr);
            return projects;
        }
      }); 
    }; // end of getProjectsViaAjax

   var QUERY_FILTER = getEnt_PodType().done(function (result) {
        "$filter=Ent_PodType eq '" + result + "'";
         getProjectsViaAjax();
    });

}

关于javascript - 在ajax内部调用ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28023337/

相关文章:

javascript - GmapPanel 无法缩放级别 - EXTJS 4

javascript - 如何判断浏览器是否支持js pushState功能?

javascript - 这个正则表达式如何匹配到组中

javascript - 可变高度,可滚动 div,内容 float

jquery - 将 live() 替换为 on()

javascript - 如何从 css 动画关键帧获取图像以在完成后保留在页面上

jquery - 内容完全加载时显示 Ajax 内容

javascript - 单击单选按钮显示日历以及 jquery 中的一个输入框

javascript - JavaScript Array 的内存管理

javascript - 使用 Ajax 将 Laravel 路由返回到 iframe