Относительно ответа в этом потоке:
IsBadReadPtr (), IsBadWritePtr (), IsBadCodePtr (), IsBadStringPtr () для Windows.
blockquote>Мой совет - держаться подальше от них, кто-то уже разместил это: http://blogs.msdn.com/oldnewthing/archive/2007/06/25/3507294.aspx
Еще одно сообщение по той же теме и тем же автором (я думаю): http://blogs.msdn.com/oldnewthing/archive/2006/09/27/773741.aspx («IsBadXxxPtr действительно нужно называть CrashProgramRandomly»).
Если пользователи вашего API отправляются с плохими данными, пусть это сбой. Если проблема в том, что переданные данные не используются дольше (и это затрудняет поиск причины), добавьте режим отладки, в котором строки и т. Д. Регистрируются при записи. Если они плохие, это будет очевидно (и, вероятно, сбой). Если это происходит часто, возможно, стоит переместить API из процесса и позволить им разрушить процесс API вместо основного процесса.
Вы должны изменить свой код, чтобы он возвращал обещание, и использовать значение в контроллере, пожалуйста, см. Фиктивный измененный код
myDemo.factory('photosFactory', function($http) {
return{
getPhotos : function() {
return $http({
url: 'content/test_data.json',
method: 'GET'
})
}
}
});
и контроллер -
controllers.AppCtrl = function($scope, $location, $http, photosFactory) {
$scope.photos = [];
photosFactory.getPhotos().success(function(data){
$scope.photos=data;
});
};
Использование библиотеки q обещаний означает, что ваша функция успеха может оставаться в вашем распоряжении:
app.factory('Data', function ($http, $q) {
return {
ajaxItems: function () {
var deferred = $q.defer();
$http({ method: "POST", url: "/Home/GetSearchResults" })
.success(function (data, status, headers, config) {
deferred.resolve(data);
}).error(function (data, status, headers, config) {
deferred.reject(status);
});
return deferred.promise;
}
}
});
app.controller('ResultsCtrl', ['$scope', 'Data', function ($scope, Data) {
$scope.get = function () {
$scope.items = Data.ajaxItems();
//the model returns a promise and THEN items
$scope.items.then(function (items) {
$scope.items = items;
}, function (status) {
console.log(status);
});
};
}]);
Использование $resource
позволит вам достичь того, что вы хотите, а также даст вам гораздо больший контроль по сравнению с $http
(Не забудьте включить ngResrouce
в качестве зависимость от вашего приложения.)
myDemo.factory('photosFactory', function($resource) {
var factory = {};
factory.getPhotos = $resource('content/test_data.json', {}, {
'query': {method: 'GET', isArray: true}
});
return factory;
});
controllers.AppCtrl = function($scope, $location, $http, photosFactory) {
$scope.photos = [];
init();
function init() {
$scope.photos = photosFactory.getPhotos.query();
}
};