javascript - 如何将 AJAX $http 调用转换为 Angular.JS

标签 javascript jquery ajax angularjs

对于我需要的功能,我找到了一个非常好的 AJAX 示例。基本上它调用 Yahoo API。但我正在使用 Angular.JS。所以我不知道如何转换它。有什么帮助吗?

这就是 AJAX 函数(详细信息参见 this postingthis JsFiddle ):

 $.ajax({
        type: 'GET',
        dataType: 'jsonp',
        jsonp: 'callback',
        jsonpCallback: 'YAHOO.Finance.SymbolSuggest.ssCallback',
        data:{
            query: request.term
        },
        url: 'http://autoc.finance.yahoo.com/autoc',
        success: function (data) {
            alert("yes");
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert(xhr.status);
            alert(thrownError);
        }
    });

所以我正在寻找的是如何将上面的代码转换成类似这样的代码。该示例应该只打印返回值。请参阅this JsFiddle 。特别是,我不知道如何处理 jsonpCallback 参数。这是我在任何其他示例中找不到的。

<div ng-app='MyModule' ng-controller='DefaultCtrl'>
    {{ test() }}
</div>

JavaScript

function DefaultCtrl($scope, myService) {
    $scope.test = myService.test;
}

angular.module('MyModule', [])
    .factory('myService', function () {
        return {
            test: function () {

                $http.get("?????")

                .success(function(data, status, headers, config) {
                    return data;
                    })
                .error(function(data, status, headers, config) {
                    return "there was an error";
                })
            }
        }
    });

中间解决方案 - 在您的帮助下 - 看起来像这样。谢谢。我必须安装 Chrome extension只要使用 the updated JsFiddle 就可以跨域调用。我更改了将参数传递给 http-get 调用的方式,并且还包含了 $q( promise )处理。结果包含来自 Yahoo YQL API 的有效列表。只需要处理该数组即可。

function DefaultCtrl($log, $scope, $http, myService) {

    var promise = myService.getSuggestions('yahoo');

    promise.then(
          function(payload) { 
              $scope.test = payload;
              $log.info('received data', payload);
          },
          function(errorPayload) {
              $log.error('failure loading suggestions', errorPayload);
          });    
}

angular.module('MyModule', [])
.factory('myService', function ($http, $log, $q) {
    return {
        getSuggestions: function (symbol) {            

            var deferred = $q.defer();

            $http.get('http://d.yimg.com/autoc.finance.yahoo.com/autoc', {
                cache: true,
                params: { 
                    query: symbol,
                    callback: 'YAHOO.Finance.SymbolSuggest.ssCallback'
                }
            })
            .success(function(data) {
                deferred.resolve(data);
            })
            .error(function(msg, code) {
                deferred.reject(msg);
                $log.error(msg, code);
            });

            return deferred.promise;
        }
    }
});

最佳答案

看看文档

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

$http.get('http://autoc.finance.yahoo.com/autoc', 
  {dataType: 'jsonp', 
   jsonp: 'callback', 
   jsonpCallback: 'YAHOO.Finance.SymbolSuggest.ssCallback'}).success(function(data){ alert("yes"); });

关于javascript - 如何将 AJAX $http 调用转换为 Angular.JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31048450/

相关文章:

javascript - 在函数构造函数中设置原型(prototype)

javascript - 为什么这个 itemDataSource 没有被清除?

jquery - 您应该一次点击全部还是一次点击一个

php - 将度数转换为 SVG 坐标

javascript - 预加载图像和样式表最有效的方法是什么?

javascript - 从字符串中提取特定数字

javascript - es6 多行模板字符串,没有新行并允许缩进

jquery - 如何使用 jQuery 选择列表框中的项目?

javascript - 检测 URL 更改(无窗口卸载)

php - javascript通过在其外部单击使div变为空白