AngularJS 假 $httpBackend.whenPOST() 未捕获类型错误 : Cannot read property '2' of undefined

标签 angularjs

AngularJS 的新手,并获得了一个模拟 $httpBackend,如文档中所述(参见此处:http://docs.angularjs.org/api/ngMockE2E.$httpBackend)。我可以重现 GET 代码,例如:

$httpBackend.whenGET('/phones').respond(phones);

但是,POST 方法失败并出现 angular-mocks.js 错误。这是我指定在 POST 上发生的事情:
      $httpBackend.whenPOST('/phones').respond(function(method,url,data){
        console.log(data);
        phones.push(angular.fromJson(data));
  });

这就是我从 Controller 调用 POST 的方式:
  var newPhone = {name:'New Phone'};
  $http.post('/forecasts/types.json', newPhone);

这就是我在控制台中看到的响应:
{"name":"New Phone"}  app.js:167

Uncaught TypeError: Cannot read property '2' of undefined angular-mocks.js:876
(anonymous function) angular-mocks.js:876
completeOutstandingRequest angular.js:2930
(anonymous function) angular.js:3209

我的代码看起来与文档几乎相同。该函数在发布时被调用,但我不知道为什么它不会运行。

编辑(感谢 Josh David Miller 对 fiddle 的评论)这是一个重现错误的 fiddle :http://jsfiddle.net/elcabo/btbds/3/
fiddle 基于 Angular 文档 (http://docs.angularjs.org/api/ngMockE2E.$httpBackend) 和 mockE2E $httpBackend 的 Angular fiddle (http://jsfiddle.net/vojtajina/DQHdk/)

有没有人以前遇到过这个问题,或者对如何解决这个问题有任何想法?

我已经广泛搜索了解决方案/相关帖子,但找不到任何内容,因此将不胜感激。

非常感谢。

最佳答案

我更新了你的 jsFiddle,现在可以使用了:http://jsfiddle.net/joshdmiller/EgMpe/ .

首先,AngularJS 的版本非常旧。我将它从 0.10.6 更新到 1.0.3。伴随这种变化而来的是许多句法变化,你可以在 fiddle 中找到。

但是您遇到的问题是没有在您的 $httpBackend.whenPOST 中返回值。方法。 respond方法应返回一个指示状态、响应正文和 header 的值。我在工作 fiddle 中包含的详细示例是:

$httpBackend.whenPOST('/phones').respond(function(method, url, data, headers){
  console.log('Received these data:', method, url, data, headers);
  phones.push(angular.fromJson(data));
  return [200, {}, {}];
});

返回的数组是 200 的响应状态,一个空的响应主体和一组空的 header (即使用默认值)。

我还添加了一个 whenGET所以你可以看到他们一起工作:

$httpBackend.whenGET('/phones').respond(function(method,url,data) {
  console.log("Getting phones");
  return [200, phones, {}];
});

关于AngularJS 假 $httpBackend.whenPOST() 未捕获类型错误 : Cannot read property '2' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14258302/

相关文章:

javascript - angularjs:使用 $compile 时指令中的范围问题

javascript - 使用 Angular 带库的警报框不适合我

javascript - 在触发任意事件之前,AngularJS 数据绑定(bind)不会更新

javascript - 在 AngularJS ui-router 中,状态已更改,url 已更改但模板 url 未更改

javascript - 无法制作动态两栏表

angularjs - 从 Google map 回调访问 $rootscope

javascript - 如何导入 400 多个模块,并在我的 angular-cli 项目中迭代它们?

javascript - AngularJS:单选复选框模型不会改变

css - 专门为徽章应用一个类

javascript - 在 IE8 的 iFrame 中运行 AngularJS 应用程序的空白页面