$ http.get不返回任何内容

时间:2016-03-17 08:10:02

标签: javascript angularjs

我的工厂方法:

angular.module('ymusica').factory('Albums', ['$http', function($http) {
return {
    query: function(term) {
        return $http.get('/api/album', { params: { q: term } });
    }
 };
}]);

IT不起作用,意味着它不会返回任何内容。如果我的api路径不正确,那么我该如何纠正呢。这里我使用rx.js,rx.time.js,rx.coincidence和typeahead.js。请帮我解决这个问题。感谢...

控制台错误: enter image description here

这是我的controller.js:

angular.module('ymusica').controller('AlbumSearch', ['$scope', 'Albums', 'Artists', '$q', function($scope, albums, artists, $q) {

$scope.albums = [];
$scope.artists = [];

var watchToObservable = function(scope, expression) {
    var observable = new Rx.Subject();

    scope.$watch(expression, observable.onNext.bind(observable));

    return observable;
}

var functionToObservable = function(scope, name) {

    var observable = new Rx.Subject();

    scope[name] = function(value) {
        observable.onNext(value);
    };

    return observable;
}

var terms = functionToObservable($scope, 'searchMusic');

terms.sample(250)
    .select(function(term) {
        var promise = $q.all([albums.query(term), artists.query(term)]);
        return Rx.promiseToObservable(promise)
    })
    .switchLatest()
    .select(function(promise) { return [promise[0].data.albums, promise[1].data.artists]; })
    .subscribe(function(result) {
        $scope.albums = result[0].slice(0, 5);
        $scope.artists = result[1].slice(0, 5);
        $scope.music = $scope.albums.concat($scope.artists);
    });

$scope.selectMusic = function(item) {
    console.log('music selected!', item);
    $scope.term = item.name;
};

$scope.imageSource = function(item) {
    return item.images['medium'];
};

$scope.hasAlbums = function() {
    return $scope.albums.length > 0;
};

$scope.hasArtists = function() {
    return $scope.artists.length > 0;
};

}]);

4 个答案:

答案 0 :(得分:1)

404,状态显示,表示客户端错误。您的API路径不正确

答案 1 :(得分:1)

如果使用http服务,则无法直接从文件系统运行AngularJS应用程序。这就是它给CORS错误的原因。因为您正在尝试从文件协议触发http请求。 要使用$ http服务,您需要一台服务器。要在本地测试它,您可以在您的计算机上安装wamp / xampp服务器。

答案 2 :(得分:0)

显示跨区域请求错误当您的Web应用程序位于差异服务器且Web api位于不同的api上时,会出现此错误

假设您的网址位于:192.168.0.1

你是请求api at 192.168.0.65

如果没有,请确保同一服务器上的web和api,然后允许跨区域请求

答案 3 :(得分:0)

因此,从提供的屏幕截图中可以看出有两个问题:

  • Cross-origin无法加载file://
  • status 404

对于第一个问题,有许多线程已经处理了交叉源请求或CORS,因为它在一般术语中使用。您可以查看其中一些线程,例如:

所以,基本上这意味着它显示错误,因为你直接尝试运行该文件而不是它应该是:http://localhost:8080/index.html或类似的东西。

一个简单的修复方法是:将其部署到本地或远程的Web服务器。 更复杂的是: *安装http-server和 *在您的app目录中运行http服务器

npm install -g http-server

安装完成后,执行:

cd <YOUR_APP_LOCATION>
http-server 
#OR
http-server -p 9090 -a 0.0.0.0 #this will start the webserver on port 9090

您现在可以打开网址:http://localhost:8080/http://127.0.0.1:9090/,这些CORS错误应该消失。

**状态404 **问题 看起来工厂中指定的路径不正确:

return $http.get('/api/album', { params: { q: term } });

您可以检查一下您的路径并在工厂中更正吗?这应该是你的问题。