Использование Ebay API с Angular & Typescript - PullRequest
1 голос
/ 12 марта 2019

У меня проблемы с использованием Ebay API в моем приложении Angular.То, что я делаю, это получение данных от Ebay в форме JSON.Это все нормально, но я получаю эту ошибку:

Uncaught ReferenceError: _cb_findItemsByKeywords is not defined

См. Мой код TypeScript ниже:

import { Component, OnInit, Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http'
import { url } from 'inspector';

@Component({
  selector: 'app-web-scrape',
  templateUrl: './web-scrape.component.html',
  styleUrls: ['./web-scrape.component.css']
})
@Injectable({
  providedIn: 'root'
})
export class WebScrapeComponent implements OnInit {

  _cb_findItemsByKeywords(root) {
    var items = root.findItemsByKeywordsResponse[0].searchResult[0].item || [];
    var html = [];
    html.push('<table width="100%" border="0" cellspacing="0" cellpadding="3"><tbody>');
    for (var i = 0; i < items.length; ++i) {
      var item     = items[i];
      var title    = item.title;
      var pic      = item.galleryURL;
      var viewitem = item.viewItemURL;
      if (null != title && null != viewitem) {
        html.push('<tr><td>' + '<img src="' + pic + '" border="0">' + '</td>' +
        '<td><a href="' + viewitem + '" target="_blank">' + title + '</a></td></tr>');
      }
    }
    html.push('</tbody></table>');
    document.getElementById("results").innerHTML = html.join("");
  }  // End _cb_findItemsByKeywords() function

  ngOnInit() {
    var url = "https://svcs.ebay.com/services/search/FindingService/v1";
    url += "?OPERATION-NAME=findItemsByKeywords";
    url += "&SERVICE-VERSION=1.0.0";
    url += "&SECURITY-APPNAME=ConorRaf-TheEazyT-PRD-d55b8f6ea-a1f297a5";
    url += "&GLOBAL-ID=EBAY-US";
    url += "&RESPONSE-DATA-FORMAT=JSON";
    url += "&callback=_cb_findItemsByKeywords";
    url += "&REST-PAYLOAD";
    url += "&keywords=harry%20potter";
    url += "&paginationInput.entriesPerPage=3";
    console.log("hello from ts");
    var s=document.createElement('script'); // create script element
    s.src = url;
    console.log(s.src)
    document.body.appendChild(s);

  }
}

Код компилируется нормально и возвращает какие-то объекты JSON, но яполучить эту ошибку в консоли:

enter image description here

Ошибка, кажется, в обратном вызове:

enter image description here

HTML только для справки:

<html>
<head>
<title>eBay Search Results</title>
</head>
<body>
<h1>eBay Search Results</h1>
<div id="results"></div>


</body>
</html>

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Почему вы используете эту script вещь?Вам лучше придерживаться Angular-пути и использовать сервис HttpClient .

Ваш код будет выглядеть так:

this.http.get(url).subscribe(root => _cb_findItemsByKeywords(root));

вместо добавления запроса в script tag.

Сначала вы можете почувствовать, как это работает, с помощью простого:

this.http.get(url).subscribe(root => console.log(root));

и построить оттуда логику.

И, кстати,Угловой способ - не манипулировать DOM напрямую, как вы.Большая часть возможностей Angular связана с шаблонизацией и связыванием данных.Я советую вам изучить Angular doc , чтобы лучше понять, что происходит при использовании Angular.

0 голосов
/ 12 марта 2019

Да, как сказано выше, вы не должны использовать скрипт с angular. Это противоречит принципам языка. Я настоятельно рекомендую проверить Angular Docs , чтобы лучше понять, как использовать компоненты.

Также я предполагаю, что вы новичок, поэтому еще один хороший ресурс для начинающих программистов доступен по адресу Tutorialspoint Angular

...