#javascript #angular
Вопрос:
Я работаю с банковским API для оплаты.банки хотят ответить, что он запретит платить JavaScript, который выполнит перенаправление HTTP в верхнем кадре на completeUrl. какой полный URL-адрес я должен предоставить банковскому api для отправки своих response.in мое приложение.компонент.ts
this.http.post("BankEndURL",quote,).subscribe(s=gt;{ //here i get quote this.newpay=s; //here im passing the paymentID to my service in angular to store there,because at the end of the transaction ,if its successful i need it to show the transaction data this.dataService.setData(s); //here i send a quote to backend to give me a bankurl with payment data this.http.post("SecondBakednURL",this.newpay).subscribe(s=gt;{ this.payaddress= s['reDirectAuthorizationHref']; //here i open the url to redirect the user to the payment portal window.open(this.payaddress);
вот сервис, который я создал :
public sharedData = new BehaviorSubjectlt;anygt;(null);
конструктор() {}
getData(){ return this.sharedData; } setData(data:any){ this.sharedData.next(data); }
и вот мой компонент получателя,тот,который банк поразит его, как только транзакция будет успешной, я собираюсь показать данные транскрипции пользователя
constructor(private dataService:DataService) {} ngOnInit(): void { this.dataService.getData().pipe( filter(data =gt; !!data) ).subscribe(data =gt; { alert(data) });
но данные здесь возвращают значение null
Комментарии:
1. Это экземпляр
BehaviorSubject
, и когда вы его используетеalert()
, он показывает вам его строковое представление[object object]
. Вы можете использоватьconsole.log()
, а неalert()
для получения более подробной информации. Если вы хотите получить данные в потоке, вам нужно использоватьsubscribe()
его метод, как вы сделали в HTTP-запросе.2. Вы используете
оператор, который также преобразует объект в строку. Вы можете использовать
console.log('the object', data)
3. Это происходит потому, что вы начинаете тему со значения
null
. Если вы не позвонитеsetData()
со значением, оно останетсяnull
, и каждый новый абонент получит последнее значение, которое являетсяnull
4. имеет
post
ли значение «url»? если нет, тоsetData
не будет называться, и ваша тема останетсяnull
5. обновил свой вопрос
Ответ №1:
В этом случае getSharedData()
возвращает сам объект поведения, поэтому разумно в этом случае подписаться на него, чтобы получать данные, которые вы отправляете при вызове setData
.
В компоненте приемника:
ngOnInit(): void { this.dataService.getData().pipe( filter(data =gt; !!data) ).subscribe(data =gt; { alert(data) }); }
Комментарии:
1. он показывает ноль ,черт возьми
2. затем отфильтруйте нулевые значения с помощью оператора фильтрующей трубы. Я отредактировал ответ, чтобы включить логику фильтра
3. предупреждение не срабатывает,я думаю, это потому, что данные пусты
4. Хорошо, значит
this.http.post("url", quote)
, вызов не попадает в обработчик подписки, это может произойти из-за ошибки http. Откройте консоль браузера, перейдите на вкладку сеть и посмотрите, сможете ли вы найти соответствующий запрос. Может быть, он действительно возвращает null с сервера.5. спасибо за ваши комментарии,я нашел их очень полезными и многому научился,оказалось,что с тех пор,как мой URL попал в банк,откроется новая вкладка,и возникла проблема, не удалось перенести данные между двумя вкладками, я использовал локальное хранилище для сортировки проблемы, глупо, но, похоже, работает!