пока я хочу поместить параметры в url, чтобы ПОЛУЧИТЬ некоторые данные, он помещает % вместо > ? Angular 9

#angular #http #url #get #angular9

#угловатый #http #url — адрес #получить #angular9 #angular #url

Вопрос:

Я хочу использовать http.get метод для получения некоторых данных в ответ, но когда я хочу поставить > , вместо этого ставится %. мой код:

 let search = "class>" `${this.class};amp;city=${this.city}`;
  

и мой метод обслуживания таков:

  getExtByClassAndCity( page_size: number, page: number, search: string,direction: string,order_by: string) {
    const params = {
      order_by,
      direction,
      page_size,
      search,
      page,
    }
    return this.http.get<any>(`${env.apiURL}sips?` `order_by=` params.order_by `amp;direction=` params.direction `amp;page_size=` params.page_size
     `amp;search=` params.search `amp;page=` params.page_size);
  }
  

и URL-адрес отправки — это

 sips?order_by=ext_sips.extensionamp;direction=descamp;page_size=5amp;search=class>xxxx;amp;city=amp;page=5
  

Я имею в виду этот % в классе param.
Пожалуйста, скажите мне, как я могу напечатать class>xxxx вместо class>xxxx .

Ответ №1:

Вы можете создать объект HttpParams и добавить к нему свои параметры следующим образом:

 const params = new HttpParams().set('order_by', order_by).set('direction', direction); // also for the other parameters
  

Тогда не создавайте весь URL самостоятельно, а добавьте HttpParams в вызов get

 return this.http.get<any>(`${env.apiURL}sips`,{params});
  

Комментарии:

1. когда я ставлю like return this.http.get<any>( ${env.apiURL}sips?${params} ); , это выдает мне ошибку: sips?[object Object]

2. {params} должен быть отдельный параметр для функции get. Я обновил ответ, так что строка действительно закрывается.

3. Вы правы, я изменил код метода на: const params2 = new HttpParams().set('order_by', order_by).set('direction', direction).set('page_size', page_size.toString()) .set('search', search).set('page', page.toString()); return this.http.get<any>( ${env.apiURL} sips? $ {params2} ); и он отлично работает. Спасибо, дорогой.

Ответ №2:

Ребята, это % не вносит никаких изменений в ответ на сервер. И если вы видите, что я помещаю page_size вместо страницы в конце запроса. Теперь он должен вернуть объект из массива 6, но он возвращает только 1 строку, и я не знаю почему! Если вы знаете, почему, пожалуйста, дайте мне знать.

Ответ №3:

У вас не может быть буквального символа «>» в URI, поэтому он кодируется в процентах. Смотрите https://www.greenbytes.de/tech/webdav/rfc3986.html#percent-encoding.

Ответ №4:

Мой ответ на вопрос моего первого ответа, это было потому, что я добавил pageIndex к 1, затем я отправил этот pageIndex как страницу в URL, но моя серверная страница начинается с 0, а не с 1, поэтому, когда у меня было 6 строк, он показывает мне только последнюю строку на второй странице (потому что page_size равен 5). Это потому, что я извлекаю данные путем разбивки на страницы с сервера.