angular $ http.get错误,意外令牌

时间:2016-01-16 03:53:05

标签: angularjs json node.js http angular-http

我刚刚开始使用此代码测试一个简单的API:

$http.get('/api/products?limit=10').then(function (response) {
    console.log(response.status);
});

我收到了这个错误:

  

SyntaxError:意外的令牌{       at Object.parse(native)       at fromJson(http://localhost:8000/bower_components/angular/angular.js:1271:14)       在defaultHttpResponseTransform(http://localhost:8000/bower_components/angular/angular.js:9460:16)       在http://localhost:8000/bower_components/angular/angular.js:9551:12       at forEach(http://localhost:8000/bower_components/angular/angular.js:340:20)       在transformData(http://localhost:8000/bower_components/angular/angular.js:9550:3)       在transformResponse(http://localhost:8000/bower_components/angular/angular.js:10319:21)       at processQueue(http://localhost:8000/bower_components/angular/angular.js:14792:28)       在http://localhost:8000/bower_components/angular/angular.js:14808:27       在Scope。$ eval(http://localhost:8000/bower_components/angular/angular.js:16052:28

顺便说一下,使用这个非角度代码,它可以正常工作:

function httpGetAsync(theUrl, callback) {
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function() { 
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
            callback(xmlHttp.responseText);
    }
    xmlHttp.open("GET", theUrl, true); // true for asynchronous 
    xmlHttp.send(null);
}

httpGetAsync('/api/products?limit=10', function(response) {
    console.log(response);
});

API的一些代码:

res.writeHead(200, {
    'Content-Type': 'application/x-json-stream'
});

// random delay
setTimeout(function () {
    var i;
    for (i=0; i<limit; i+=1) {
        res.write(JSON.stringify(createRandomItem(i+skip, sort)) + '\n');
    }
    res.end();
}, 100 + Math.floor(Math.random() * 3000));

我真的无法弄清楚问题是什么,也已经尝试过资源而且没有用。 您可以看到整个代码on my github,请提供帮助。

1 个答案:

答案 0 :(得分:0)

我在客户端解决了这个问题:

var WareHouseResource = $resource('/api/products?limit=10', {}, {
        query: {
            method: 'GET',
            isArray: true,
            transformResponse: function(data) {
                data = ('[' + data + ']').replace(/}/g, '},').replace(',\n]', ']');
                return angular.fromJson(data);
            }
        }
    });