Javascript 角度http响应长度未定义

Javascript 角度http响应长度未定义,javascript,angularjs,Javascript,Angularjs,我正在使用Angular与jQuery Mobile交互并创建几个页面,但在连接到JSON请求时遇到了$http服务的问题。我用函数填充了一些数组,可以将数据带回页面,但有时会出现类似这样的错误 无法读取未定义的属性“length” 我的代码如下所示: $http.jsonp(url).success(function(data) { for (i=0; i<data.PROJECT.length; i++) $scope.ProjectList.push( { id:da

我正在使用Angular与jQuery Mobile交互并创建几个页面,但在连接到JSON请求时遇到了$http服务的问题。我用函数填充了一些数组,可以将数据带回页面,但有时会出现类似这样的错误

无法读取未定义的属性“length”

我的代码如下所示:

$http.jsonp(url).success(function(data) {
  for (i=0; i<data.PROJECT.length; i++)
      $scope.ProjectList.push( { id:data.PROJECT[i].PROJECT_CODE, name:data.PROJECT[i].PROJECT_DESC } );
});
{
  "PROJECT": [ 
    { "PROJECT_CODE": ..., "PROJECT_DESC": ... },
    ...
  ]
}
相同错误(或无错误和空白结果)。我做错了什么?我在它自己的函数中有每个API调用,所以它不应该重用对象(可能是附加对象?)。这是第一部分;第2部分是将我的代码分为控制器/服务-当我这样做的时候,我也会遇到同样的错误

更新


我创建了一个JSFIDLE来显示值有时是如何填充的——运行几次,您会注意到数组轮流返回空的。如果您能够看到console.log输出,您将看到ProjectList包含EquipList的结果集(除了ProjectList之外),反之亦然

很抱歉,现在还不让我评论:-S所以我在这里回答。基于你的

。。。除了有时我会遇到这样的错误

听起来您正在调用的URL没有正确响应。假设JSON响应如下所示,代码看起来不错:

$http.jsonp(url).success(function(data) {
  for (i=0; i<data.PROJECT.length; i++)
      $scope.ProjectList.push( { id:data.PROJECT[i].PROJECT_CODE, name:data.PROJECT[i].PROJECT_DESC } );
});
{
  "PROJECT": [ 
    { "PROJECT_CODE": ..., "PROJECT_DESC": ... },
    ...
  ]
}
但是,如果您间歇性地出现这种情况,我猜服务器会使用除上述结构之外的其他结构进行响应,但是仍然发送HTTP状态
200OK

尝试监视您的网络请求并查看实际响应,或者在
成功
函数中对
数据
执行
控制台日志操作

---编辑

因为我认为这主要是一个API问题。API有时似乎会使用正确的列表进行响应,但通常(至少现在)它会使用
HTTP 200 OK
进行响应,但没有任何数据(
内容长度:0
)。您的小提琴在加载时并没有真正显示出来,所以我在这里稍微更新了您的代码:。您从未出现“This never shop”的原因是,API响应为“OK”,而不是一些错误代码,如HTTP 500 Inter server error
或类似的代码


我希望这有帮助

很抱歉,现在还不让我评论:-S所以我在这里回答。基于你的

。。。除了有时我会遇到这样的错误

听起来您正在调用的URL没有正确响应。假设JSON响应如下所示,代码看起来不错:

$http.jsonp(url).success(function(data) {
  for (i=0; i<data.PROJECT.length; i++)
      $scope.ProjectList.push( { id:data.PROJECT[i].PROJECT_CODE, name:data.PROJECT[i].PROJECT_DESC } );
});
{
  "PROJECT": [ 
    { "PROJECT_CODE": ..., "PROJECT_DESC": ... },
    ...
  ]
}
但是,如果您间歇性地出现这种情况,我猜服务器会使用除上述结构之外的其他结构进行响应,但是仍然发送HTTP状态
200OK

尝试监视您的网络请求并查看实际响应,或者在
成功
函数中对
数据
执行
控制台日志操作

---编辑

因为我认为这主要是一个API问题。API有时似乎会使用正确的列表进行响应,但通常(至少现在)它会使用
HTTP 200 OK
进行响应,但没有任何数据(
内容长度:0
)。您的小提琴在加载时并没有真正显示出来,所以我在这里稍微更新了您的代码:。您从未出现“This never shop”的原因是,API响应为“OK”,而不是一些错误代码,如HTTP 500 Inter server error
或类似的代码



我希望这有帮助

数据是什么样子的?在success callbacksees中尝试
console.log(data)
,就像在第一种情况下,您应该使用
$http.jsonp(url).success(函数(数据){for(i=0;我不在函数参数内使用请求对象。.使用不同的东西,如
res
,在第二次调用中应该是
返回请求。然后是(函数(res){return res.data.PROJECT;},handleError);
@pankajparkar,为什么不呢?@Brennan好主意-我在控制台中看到了奇怪的东西。出于某种原因,它堆叠了我的$http请求:对象{响应:“失败”,数据:对象,项目:数组[100],设备:数组[100],帐户:数组[100]}
data
是什么样子的?在success callbacksees中尝试
console.log(data)
,就像在第一种情况下,您应该使用
$http.jsonp(url).success(函数(数据){(i=0;我不在函数param中使用request对象。请使用不同的东西,如
res
,在第二次调用中,它应该是
返回请求。然后(函数(res){return res.data.PROJECT;},handleError)
@pankajparkar,为什么不呢?@Brennan好主意-我在控制台中看到了奇怪的东西。出于某种原因,它在堆叠我的$http请求:Object{response:“failure”,data:Object,PROJECT:Array[100],device:Array[100],ACCOUNT:Array[100]}。
data
看起来像什么?试试
console.log(data)
在第一种情况下的success callbackseem中,您应该使用
$http.jsonp(url).success(函数(数据){for(i=0;我不在函数param中使用request对象..使用不同的东西,如
res
,在第二次调用中,它应该是
返回请求。然后(函数(res){return res res.data.PROJECT;},handleError)
@pankajparkar,为什么不?@Brennan好主意-我在控制台中看到了奇怪的东西。出于某种原因,它将我的$http请求:Object{response:“failure”,数据:Object,项目:Array[100],设备:Array[100],帐户:Array[100]}console.log显示成功和失败(因为我不得不对流行的5个数组调用这些请求5次。奇怪的是,它们被堆叠起来,并且随机地轮流失败。例如:
Object{response:“success”,ACCOUNT:Array[100]}rambo.js:67
Object{response:“failure”,data:Object,DEPARTMENT:Array[100],ACCOUNT:Array[100]}
这里没有太多工作要做,所以我建议你更新你的任务