Angular HttpClient получить запрос - как получить отправленные текстовые данные? - PullRequest
0 голосов
/ 01 марта 2020

У меня есть приложение Angular / Ioni c, которое взаимодействует с Django бэкэндом. Я использую this.http.get() для связи с этим сервером (на Heroku), а сервер Django должен отправлять текст «ОК». Вместо этого я либо (в зависимости от указанного c использования this.http.get()) получаю ошибку, где statusText - это текст, который я хочу, либо что-то вроде Object { _isScalar: false, source: {…}, operator: {…} } My Django code просто:

def make(request, otherParams):
    ...
    return HttpResponse("OK")

Я знаю, что get() добрался до сервера, потому что сервер запускает определенные вещи при вызове соответствующей функции.

Как мне, из интерфейса Angular, определить, Django Сценарий отправил «ОК» или нет?

(ошибка не из-за какой-либо из различных политик CORS, я установил django -cors-headers)

РЕДАКТИРОВАТЬ : если это уместно, я на Windows P C, тестирую на localhost / Firefox Nightly с Ioni c 5 и Angular 9. Вот мой код внешнего интерфейса, вырезая ненужные биты. То, как я сделал мой запрос GET, не соответствует, попробовав много. Этот предложен в следующем посте, и все еще не работает.

import { Component, OnInit } from '@angular/core';
import { AlertController } from '@ionic/angular';
import { HttpClient } from '@angular/common/http';
@Component({
  selector: 'app-submit',
  templateUrl: './submit.page.html',
  styleUrls: ['./submit.page.scss'],
})
export class SubmitPage implements OnInit {

    constructor(public alertController: AlertController, private http: HttpClient) { }

  ngOnInit() {
  }
    //irrelevant variable-getting
    save() {
        console.log(this.list);
        if (this.title == null || this.title == "") {
            this.presentAlert("Uncompleted fields", "Please complete the Title field!");
        }
        else if (this.sub == null || this.sub == "") {
            this.presentAlert("Uncompleted fields", "Please complete the Subtitle field!");
        }
        else if (this.content == null || this.content == "") {
            this.presentAlert("Uncompleted fields", "Please complete the Content field!");
        } else {
            try {
                if (this.list.length == 0) {
                    console.log(this.list);
                    throw "empty list";
                }
                //more irrelevance
            }

            catch{ this.presentAlert("Uncompleted fields", "Please complete the list!"); }
            if (temp2) {
                this.makePost();
            }
        }
    }
    makePost() {

       var temp = (<root url> + encodeURIComponent(this.title) + `/` + (this.posterID).toString() + '/' + encodeURIComponent(this.sub) + '/' + encodeURIComponent(this.content) + '/' + this.happy.toString() + '/' + this.angry.toString() + `/` + this.stressy.toString() + `/` + this.energy.toString() + '/' + this.worry.toString());
        console.log(temp);
         this.http.get(temp).toPromise()
             .then(r => console.log('response', r)).catch(error => console.error(error));
    }

}

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Если вы используете HttpClient для вызова запроса GET, вам нужно что-то сделать с this.http.get().

Вместо этого попробуйте сделать что-то подобное:

Если вы можете использовать async / await

const response = await this.http.get(<url>);

Если вы не можете использовать async / await

this.http.get(<url>).then(r => console.log('response', r) ).catch( error => console.error(error) );

Если вы просто выполните:

const response = this.http.get(<url>);
console.log(response);

Вы фактически регистрируете Promise, а не решено Promise, которое содержит данные, которые вы ищете.

Если вы сможете показать больше кода из приложения Angular, это поможет определить, является ли это вашей проблемой или нет. Для устранения неполадок с базовым c я бы сначала проверил, что ваш запрос GET (в вашем приложении Python) работает сам по себе. Используя Почтальон, вы можете проверить это (вместе с методами). Если ваш GET запрос работает нормально, то проблема, скорее всего, в вашем angular приложении, которое я описал, как исправить выше.

0 голосов
/ 03 марта 2020

Оказалось, что мой сценарий Angular пытается интерпретировать ответ как JSON, а не в виде открытого текста, который я хотел. Используя код из ответа mwilson и добавив { responseType: 'text' } в параметры get (), консоль теперь успешно регистрирует ответ.

My Фрагмент кода теперь выглядит следующим образом: this.http.get(url, { responseType:'text'}).toPromise().then(r => console.log(r)).catch(error => console.error(error));

Кстати, не стесняйтесь указывать на любые улучшения / оптимизации вышеупомянутого кода, если вы чувствуете, что это нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...