angularjs $ http.jsonp即使收到200也会转到.error而不是.success

时间:2013-08-03 13:45:39

标签: angularjs

我正在构建一个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)。

我错过了什么?

2 个答案:

答案 0 :(得分:6)

您必须在服务器端返回有效的JSON响应。 200 OK只是注入DOM的GET请求。我敢打赌,你没有从服务器返回一个有效的JSON响应和正确的响应代码。

以下是如何在服务器端构建响应的示例(PHP): Simple jQuery, PHP and JSONP example?

答案 1 :(得分:0)

回答here时,您需要更改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”等...

现在是的,AngularJS正确回调'成功'功能。