#javascript #angularjs
#javascript #angularjs
Вопрос:
Пожалуйста, пожалуйста, помогите: ( (разочарован)
У меня есть таблица в моей базе данных mysql, в которой хранится время записи avalabe;
На моем сайте есть кнопки to, которые пользователь может нажать и получить соответствующие доступные сроки бронирования, которые вы можете видеть на прилагаемом рисунке .
Каждый раз, когда пользователь нажимает стрелку влево / вправо, я запускаю заводскую функцию, а затем получаю данные, содержащие множество книг, относящихся к этому дню, пока все работает нормально.
Проблема: когда пользователь впервые заходит на мой сайт, я получаю текущий день и показываю доступные времена книг, относящиеся к этому дню (сегодня), и когда пользователь нажимает стрелку влево / вправо, я получаю доступные книги, относящиеся к трем дням позже с сегодняшнего дня. это тоже работает нормально.
Но это медленно.
Я хочу, чтобы, когда пользователь заходил на мой сайт, я получал данные, относящиеся к сегодняшнему дню, вплоть до двух месяцев спустя.
Но я хочу показать только сегодняшние (и на следующий день, и на следующий 2day) книги avalabe. Поэтому, когда пользователь нажимает на стрелку влево / вправо, мне не придется вызывать другой http-запрос и заставлять пользователя ждать, пока мои данные будут доступны для просмотра.
Есть ли способ определить некоторые асинхронные http-запросы и сохранить данные об успешном обратном вызове, но не использовать их, пока пользователь не нажмет специальную клавишу (в моем случае стрелку влево / вправо)???
Вот моя функция http-запроса на заводе :
app.factory('ShowBookingFacDrProfile',function($http){
return{
showbooking:function(scope){
$http.post("partials/search-drprofile/show_available_books.php",{today,nextday,next2day})// I just simplicized the object that I send here
.success(function(msg){
scope.booking=msg;;
//here I want to do something like this :
then.post('sameURL',{next3day,next4day,next5day})
// I want to repeat this until 2 month later from today
then.post('sameURL',{next6day,next7day,next8day})
}
}
});
связанный контроллер:
$scope.hitArrow = function(current) {
$scope.pager = current;
SearchFac.search($scope);
};
Отмечая особое в моем контроллере
Я знаю, что могу использовать обещания ! , но как их сохранить? где?Как использовать их позже?
Я не могу сохранить их в новом scope.booking , например: scope.booking2 , потому что тогда я не смогу их правильно использовать: (
Я не могу использовать кеш, потому что, возможно, каждую минуту avalabe books меняется: (
Это мое мнение:
<div class='col-xs-4'>
<table class='table table-responsive' >
<tr data-ng-repeat='v in booking |filter:{month:date.next2month} |filter:{day:date.next2day}'>
<td><a>{{v.hour}}</a></td>
</tr>
</table>
</div>
<div class='col-xs-4'>
<table class='table table-responsive' >
<tr data-ng-repeat='v in booking |filter:{month:date.nextmonth} |filter:{day:date.nextday}'>
<td><a>{{v.hour}}</a></td>
</tr>
</table>
</div>
<div class='col-xs-4'>
<table class='table table-responsive' >
<tr data-ng-repeat='v in booking |filter:{month:date.today} |filter:{day:date.today}'>
<td><a>{{v.hour}}</a></td>
</tr>
</table>
</div>
ПРИМЕЧАНИЕ
На самом деле я видел этот подход на этом сайте
Нажмите
Пожалуйста, посмотрите и нажмите на стрелки, вы увидите, как быстро появляется новое доступное время записи
Комментарии:
1. «Я не могу использовать кэш, потому что, возможно, каждую минуту avalabe books меняется». Если вы получаете доступные книги раз в минуту и сохраняете их локально, решает ли это эту часть проблемы?
2. На самом деле я мало что знаю о кэшировании:( Но я думаю, что в моей проблеме кэширование не поможет, потому что, если пользователь впервые заходит на мой сайт, обналиченных данных не будет! И моя проблема все еще существует: медленные запросы: (
3. возможно, ваша работа должна быть в вашем api, return и array по дате, поэтому вы делаете только один (больший, но уникальный) запрос
4. О, может быть, мой серверный сервер — это PHP и его очень простая база данных, и на странице я покажу 10 врачей с множеством книг avalabe, как я это сделаю? 🙁
5. Согласитесь с @bto.rdz, если производительность является проблемой, создайте конечную точку API, которая получает столько данных, сколько вы можете логически сгруппировать. Похоже, вы ждете завершения своего первого вызова, прежде чем начать свой 2-й (очень похожий) вызов и т.д. По возможности объедините их в один вызов.
Ответ №1:
Если $scope. booking — это массив, вам просто нужно добавить содержимое http-ответов (array.push(object)).
Комментарии:
1. Я не могу добавить новые данные к бронированию (кстати, это массив), потому что я не использую их, а ng-repeat всасывает более 2000 повторяющихся данных