javascript - AJAX XML数据到$scope,同步性问题

标签 javascript jquery angularjs

因为我有很多 Controller 或多或少执行相同的操作,所以我想创建一个函数来获取 XML 文件的文件名并将其分配给 $scope 变量。明显的问题是异步调用。

是否有“暂停”或其他情况会阻止 ngXMLFile 函数结束,直到 AJAX 调用完成,以便它不会将 undefined 分配给 $scope.authors 因为 sectionController 中的 data未定义

我尝试了这个$.when,但很明显我没有正确使用它。

function ngXMLFile($http, filename) {
    $http({method: "GET", url: "/xml/"+filename+".xml"}).
    success(function(data, status, headers, config) {
        return $.xml2json(data);
    }).
    error(function(data, status, headers, config) {
    });
}

function sectionController($scope, $http) {
    $.when(ngXMLFile($http, "authors")).then(function(data) {
        $scope.authors = data;
    });
}

XML 文件(authors.xml):

<?xml version="1.0" encoding="UTF-8"?>

<authors>
    <author>
        <name>
            <first>Bob</first>
            <last>Smith</last>
        </name>
    </author>
    <author>
        <name>
            <first>Joe</first>
            <last>King</last>
        </name>
    </author>
</authors>

最佳答案

您想要的是将回调函数传递给您的 Ajax 调用函数,例如:

function ngXMLFile($http, filename, callback) {
    $http({method: "GET", url: "/xml/"+filename+".xml"}).
        success(function(data, status, headers, config)
            {
                 callback($.xml2json(data));
            }
        ).
        error(function(data, status, headers, config)
            {
            }
        );
}

function sectionController($scope, $http) {
    ngXMLFile($http, "authors",function(data) {
        $scope.authors = data;
    });
}

关于javascript - AJAX XML数据到$scope,同步性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25336010/

相关文章:

javascript - Jade /哈巴狗 : passing html that contains a variable into template

javascript - 如何用javascript执行点击功能?

javascript - 多个整页背景图像

html - Angular Bootstrap Carousel - 在不拉伸(stretch)的情况下使图像适合方框

javascript - 如何在 Angular Js 中不使用指令的情况下调用作用域值的 onchange 事件?

javascript - 使用全局 axios 配置未定义承载 token

javascript - 具有依赖关系的多个调用 redux-thunk

javascript - 点击显示表单,平滑过渡

javascript - 使用javascript绘制笑脸并在半透明div中显示

javascript - mattlewis92 的 Angular bootstrap 日历不显示