javascript - 如何使 $q 和 $http 一起工作?

标签 javascript angularjs http

我正在尝试让这段代码工作

getDataObject = {
    transformData: function (wmsLayer) {
    var promise = this.getDataFromServer(wmsLayer);
    promise.then(
        function(XMLInput){
            layers = $(XMLInput).find('LayerDescription').each(function() {
                var item = $(this);
                var layerName = item.attr('name');
                layerNames.push(layerName);
            });       
            },
        function(data){
                this.error(data)
                });
},

getDataFromServer: function(wmsLayer) {
var deferred = $q.defer();
var layerGroup = wmsLayer.params.LAYERS[0];
    $http.get({
        url : '//localhost/geoserver/BL_WFS/wms',
        params : {
            service : 'WMS',
            version : '1.1.1',
            request : 'DescribeLayer',
            layers :  layerGroup,
        },
        responseType : 'xml'
    })
    .success(function(data){
        deferred.resolve(data);
    })
    .error(function(error){
        deferred.reject(error);
    });
return deferred.promise;        
}

但是我遇到了两个问题:

  1. 尽管我在 $http 中设置了 url,该函数仍会调用页面的来源 url。

  2. 我只想在响应返回数据时执行 transformData 函数,但我不确定我是否正确设计了 promise/defer 结构。

    <

最佳答案

首先,您使用的是 angulars 速记 $http.get。这个函数签名为 $http.get(url, config) 所以它应该是

$http.get('//localhost/geoserver/BL_WFS/wms', {
    params : {
        service : 'WMS',
        version : '1.1.1',
        request : 'DescribeLayer',
        layers :  layerGroup,
    },
    responseType : 'xml'
})

其次,$http 已经返回一个您可以使用的 Promise 对象,它会自动解决或拒绝,因此您可以在这种情况下直接返回它。

来源:https://docs.angularjs.org/api/ng/service/ $http

编辑:将 Angular 文档放在手边并检查它始终是一个好主意。

关于javascript - 如何使 $q 和 $http 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38119368/

相关文章:

javascript - Node.js - 等待多个异步调用

javascript - 在黑暗环境中使用屏幕的方法

javascript - jQuery ScrollTo anchor 链接但类不是 ID

AngularJS : Factory Service Controller $http. 获取

Java HttpURLConnection | POST 方法 | HTTP header 字段的顺序

java - 一个接一个地发送 HTTP POST 请求

javascript - 如何在 Angular 工厂内定义ngModel?

javascript - 将服务注入(inject) Angular 1.5 组件

javascript - 更改 css 子元素导航树

Angular 设置 HTTP 超时