3

我正在构建一个 AngularJS 应用程序,它调用从数据库获取数据的 NodeJS 服务器。NodeJS 返回一个 JSON.stringify(someArrayWithData)。

这是 AngularJS 代码:

$scope.getMainGroups = function(){
    $http.jsonp("http://127.0.0.1:3000/get/MainGroups?callback=JSON_CALLBACK").success(function(data, status, headers, config) {
            $scope.MainGroups = data;
        }).error(function(data, status, headers, config) {
            $scope.MainGroups = status;
        });
};

$scope.MainGroups 将转到 .error 而不是成功,即使我可以在 chrome 调试器中看到结果返回(200 ok)。

我错过了什么?

4

2 回答 2

6

You must return a valid JSON response on the server side. The 200 OK is just the GET request that is injected into the DOM. I bet you are not returning a valid JSON response from the server with right response code.

Here is an example on how to construct the response on the server side (PHP): Simple jQuery, PHP and JSONP example?

于 2013-08-03T13:58:23.510 回答
0

正如在此处回答的那样,您需要更改 NodeJS 响应。JSONP 答案需要以 AngularJS 在 URL 中添加的确切文本开头(例如“angular.callbacks._1”)。

// changes in your server script used by NodeJS
// Required for JSONP calls, 'callback' matches the '?callback=JSON_CALLBACK'
app.set('jsonp callback name', 'callback'); 

// ... in your response change json to jsonp
res.jsonp(votes);

完成这些更改后,当服务器在参数中检测到“回调”时,答案如下:

/**/ typeof angular.callbacks._1 === 'function' && angular.callbacks._1([{"votes":3,"title":"new topic", etc...

现在是的,AngularJS 正确地回调了“成功”函数。

于 2014-09-08T10:36:40.657 回答