2015-06-03 2 views
1

Я использую Angular для взаимодействия с jQuery Mobile и создания нескольких страниц, но у меня проблема с сервисом $ http при подключении к моим запросам JSON. У меня есть несколько массивов я заселение с функциями и может вернуть данные в моих страниц, за исключением времени я получаю ошибки как этотУгловая длина ответа HTTP undefined

Не удается прочитать свойство «длина» неопределенного

Мои код выглядит так:

$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 }); 
}); 

Цикл My For, где он будет случайно разбиваться. Я также пробовал подход «затем»:

var request = $http.jsonp(url); 
return request.then(function(request) { return request.data.PROJECT; }, handleError); 

Такая же ошибка (или отсутствие ошибок и пробелов). Что я делаю не так? У меня есть каждый API-вызов в его собственной функции, поэтому он не должен повторно использовать объекты (может быть, он добавляет их?). Это часть 1; часть 2 разделяет мой код на контроллер/службу - я получаю эти же ошибки, когда я это делаю.

UPDATE

Я создал jsFiddle here для показа, как значения будут ИНОГДА - запустить его несколько раз, и вы заметите, что массивы по очереди возвращаются пустыми. Если вы смогли увидеть вывод console.log, вы увидите, что ProjectList содержит результирующий набор EquipList (в дополнение к ProjectList) и наоборот.

+1

Как выглядит 'data'? Попробуйте консоль.log (data) 'в обратном вызове успеха – Brennan

+0

кажется, что в первом случае вы должны использовать' $ http.jsonp (url) .success (функция (данные) { для (i = 0; i Grundy

+0

Не использовать объект запроса внутри вашей функции param..use что-то другое, например' res', во втором вызове это должно быть 'return request.then (function (res) {return res.data.PROJECT;}, handleError);' –

ответ

0

Извините, SO не позволяет мне прокомментировать: -S, поэтому я отвечу здесь. На основании ваших

... кроме временами я получаю сообщение об ошибке, как этот

это звучит как URL, которому вы звоните не отвечает правильно. Код выглядит хорошо, предполагается, что ваш ответ JSON выглядит следующим образом:

{ 
    "PROJECT": [ 
    { "PROJECT_CODE": ..., "PROJECT_DESC": ... }, 
    ... 
    ] 
} 

Однако, если у вас есть это периодически я предположил бы, что сервер отвечает с чем-то другим, чем это выше структуры, однако до сих пор отправки статуса HTTP 200 OK.

Попытайтесь проверить свои сетевые запросы и посмотреть, что такое реальный ответ, или сделать console.log из data внутри функции success.

--- EDIT

Как я думал, что это в основном является вопросом API. API, кажется, иногда реагирует на правильный список (ы), но часто раз (по крайней мере сейчас) он отвечает HTTP 200 OK, но без каких-либо данных (Content-Length: 0). Ваша скрипка на самом деле не отображается, когда она загружается, поэтому я немного обновил ваш код здесь: http://jsfiddle.net/gce4ns9a/15/. Причина, по которой у вас никогда не было этого «Это никогда не появляется», заключается в том, что API отвечает «ОК» вместо некоторого кода ошибки, такого как HTTP 500 Inter server error или что-то подобное.

Я надеюсь, что это поможет.

+0

console.log показывает как успехи, так и неудачи (поскольку я h чтобы называть эти запросы 5 раз популярным 5 массивам. Странно, что они сложены, и случайным образом по очереди оказывается неудачным. Пример: 'Object {response:" success ", ACCOUNT: Array [100]} rambo.js: 67' и' Object {response: "failure", data: Object, DEPARTMENT: Array [100], ACCOUNT: Array [100]} ' – James

+0

Здесь не так уж много, поэтому я предлагаю вам обновить свой вопрос с помощью более подходящего кода (вы говорите, что вы являетесь популяцией 5 массивов из 5 запросов? Пожалуйста, разместите все это, если возможно). Кроме того, возвращаемые объекты четко определяют какую-то индикацию «отказ», «успех», которая не является родной AngularJS '$ http', поэтому я бы посоветовал вам также проверить это. Таким образом, в вашем обработчике успеха также выполняется 'if (data.response === 'success') {}'. – Auke

+0

Спасибо @Auke - извините, я новичок в SO и не очень свободно владею Angularjs. Я добавил jsFiddle к моему первоначальному вопросу, надеюсь, что это поможет. – James

Смежные вопросы