javascript - api 调用在一种方法中工作但在另一种方法中不起作用 ---TypeError : Cannot read property 'getResponse' of undefined

标签 javascript html angularjs typescript rxjs

更新2:伙计们,我使用 Kushpf 回答问题已经解决了...但现在我得到了另一个...我想当我请求时我需要传递正确的 ID...我什至硬编码,但我仍然遇到错误..你能告诉我如何修复它吗...

GET http://sports.com/Rats/color/black?RatId=20060&timestamp=1508039029859 404 (Not Found)
An error occurred Response {_body: "{"timestamp":1508039067018,"status":404,"error":"N…ssage available","path":"/Rats/color/black"}", status: 404, ok: false, statusText: "Not Found", headers: Headers, …}

更新 1: 我尝试使用 Derek 解决方案,但仍然发生相同的错误..我打印出来并看到 self...因为我没有看到 sportsservice...有什么办法可以修复它

打印 self 值(value)观

init {elemen: M.fn.init(1), _event: {…}, option: {…}, tabl: M.fn.init(1), wrappe: M.fn.init(1), …}
altRowTemplate:
ƒ ()
columns:
(13) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
content:
[div.k-grid-content.k-auto-scrollable, prevObjec: M.fn.init(1), contex: undefined]
dataSource:
init {option: {…}, _ma: {…}, _prefetc: {…}, _dat: init(21), _pristineDat: Array(21), …}
element:
[div#animals.contractPopupkGrid.k-grid.k-widget.k-reorderable, contex: div#animals.contractPopupkGrid.k-grid.k-widget.k-reorderable]
footer:
[prevObjec: M.fn.init(1), contex: div#animals.contractPopupkGrid.k-grid.k-widget.k-reorderable, selecto: ".k-grid-footer"]
options:
{prefi: "", nam: "Grid", column: Array(13), toolba: null, autoBin: false, …}
pager:
init {elemen: M.fn.init(1), _event: {…}, option: {…}, dataSourc: init, linkTemplat: ƒ, …}
resizable:
init {elemen: M.fn.init(1), _event: {…}, option: {…}, orientatio: "horizontal", _positionMous: "x", …}
rowTemplate:
ƒ ()
scrollables:
(2) [div.k-grid-header-wrap.k-auto-scrollable, div.k-grid-content.k-auto-scrollable, prevObjec: M.fn.init(1), contex: undefined]
selectable:
init {elemen: M.fn.init(1), _event: {…}, option: {…}, _marque: M.fn.init(1), _lastActiv: null, …}
table:
[table.k-selectable, prevObjec: M.fn.init(1), contex: undefined]
tbody:
[tbody, prevObjec: M.fn.init(1), contex: undefined]
thead:
[thead, prevObjec: M.fn.init(1), contex: undefined]
wrapper:
[div#animals.contractPopupkGrid.k-grid.k-widget.k-reorderable, contex: div#animals.contractPopupkGrid.k-grid.k-widget.k-reorderable]
_cellId:
"animals_active_cell"
_data:
(10) [init, init, init, init, init, init, init, init, init, init]
_draggableInstance:
init {elemen: M.fn.init(1), _event: {…}, option: {…}, _activate: false, userEvent: init, …}
_errorHandler:
ƒ ()
_events:
{dataBoun: Array(1)}
_group:
false
_groupableClickHandler:
ƒ (n)
_isMobile:
false
_muteRebind:
false
_progressHandler:
ƒ ()
_refreshHandler:
ƒ ()
_setContentWidthHandler:
ƒ ()
_size:
{widt: 960, heigh: 381}
__proto__:
r
  • 我正在尝试学习 Angular 和 TypeScript。
  • 我在使用新服务时遇到错误。
  • 但是当我通过 rxjs 使用另一个服务时,它不会抛出错误。
  • 你能告诉我如何解决这个问题吗?
  • 提供下面的相关代码。
  • 整个代码我会简单地给出它,因为它很大

//这里发生错误 this.sportsservice.getResponse(vals, 'get', "")

https://gist.github.com/texirv0203/e071a9ebea3a6aa0f8a0c65d47f75807

    $("#AnimalRatsGrid .RatNameFile").bind("click", function(e) {
      console.log("I am here");
       alert("I am here");
      //let params=values.selectedRow.sunDocID;
      //let url='http://sun.isports.com/PdfRatViewer.aspx?Ratid='+params+'&Ratsource=DISTRIBUTIONRat'

      kendo.ui.progress($("#loading"), true);
      //let vals ="Rats/color/black?RatId="+values.selectedRow.RatId;
                        let vals ="Rats/color/black?RatId="+"7887878787";

                //let vals ="Rats/color/black?RatId="+"233223232323";
                    this.sportsservice.getResponse(vals, 'get', "")
                                        .subscribe(data => {                     
                               //this.saveData(data, values.selectedRow.RatName);
                              //this.saveData(data, "untitled.txt");
                              var blob = new Blob([data], { type: 'application/octet-stream' });

                             // var blob = Blob {"size": "11573", "type": "application/octet-stream"}

                             let fire = "untitled1.txt";
                              this.sportsservice.saveAs(blob,fire);

                                                //kendo.ui.progress($("#loading"), false);
                                        },
                                        err => { 
                             //kendo.ui.progress($("#loading"), false);
                             }
                        );




    });

错误

VM61482:27 TypeError: Cannot read property 'getResponse' of undefined
    at HTMLAnchorElement.eval (animal.ts:427)
    at HTMLAnchorElement.dispatch (jquery-2.2.3.js:4737)
    at HTMLAnchorElement.elemData.handle (jquery-2.2.3.js:4549)
    at ZoneDelegate.invokeTask (zone.js:236)
    at Object.onInvokeTask (core.umd.js:6233)
    at ZoneDelegate.invokeTask (zone.js:235)
    at Zone.runTask (zone.js:136)
at HTMLAnchorElement.ZoneTask.invoke (zone.js:304)

此方法没有错误

  public snakeRocket(values)
  {
    let grid = $("#AnimalRatsGrid").data("kendoGrid");

    let dataitem = grid.dataItem(grid.select());
    grid.dataSource.remove(dataitem);

    $("#divRocketAnimalRat").hide();

    let snakes = [
        { 
          "id": values.mainId,
          "RatDtos" : [{
            "RatId":dataitem.RatId,
            "RatName": dataitem.RatName,
            "RatType": dataitem.RatType,
            "RatData": this.encodeBase64,
            "notes": "",
            "notesId": 123,
            "sunDocID": 123,
            "url": "://localhost:1299/upload",
            "categoryType": "",
            "Timestamp": dataitem.date,
            "userID": dataitem.userID,
            "addedByName": dataitem.addedByName,
            "operationType": "Rocket",

            }]          
        } 
      ];

    this.sportsService.getResponse("player/color/Rat/", "post", snakes[0])
      .subscribe(data => {
          if (data.code === "S001") {
          } else {
          }
        },
        err => {
        }
      );

    $(".k-pager-numbers li").last().find("a").click();
  }

最佳答案

您必须小心 this 所指的内容:

在第二个(工作)示例中,您在设置了 this.sportservice 值的类上下文中执行 this.sportservice.getResponse()

但是,在您的错误示例中,您正在传递给 $().bind() 函数的回调内执​​行 this.sportservice.getResponse() 。此回调具有不同的上下文,因此 this 的值也不同。您可以阅读有关this如何工作的更多信息here .

一个简单的解决方案是创建一个对您实际想要使用的 this 上下文的新引用。例如:

var self = this;
$("#AnimalRatsGrid .RatNameFile").bind("click", function(e) {
  console.log("I am here");
   alert("I am here");
  //let params=values.selectedRow.sunDocID;
  //let url='http://sun.isports.com/PdfRatViewer.aspx?Ratid='+params+'&Ratsource=DISTRIBUTIONRat'

  kendo.ui.progress($("#loading"), true);
  //let vals ="Rats/color/black?RatId="+values.selectedRow.RatId;
                    let vals ="Rats/color/black?RatId="+"7887878787";

            //let vals ="Rats/color/black?RatId="+"233223232323";
                self.sportsservice.getResponse(vals, 'get', "")
                                    .subscribe(data => {                     
                           //this.saveData(data, values.selectedRow.RatName);
                          //this.saveData(data, "untitled.txt");
                          var blob = new Blob([data], { type: 'application/octet-stream' });

                         // var blob = Blob {"size": "11573", "type": "application/octet-stream"}

                         let fire = "untitled1.txt";
                          self.sportsservice.saveAs(blob,fire);

                                            //kendo.ui.progress($("#loading"), false);
                                    },
                                    err => { 
                         //kendo.ui.progress($("#loading"), false);
                         }
                    );




});

关于javascript - api 调用在一种方法中工作但在另一种方法中不起作用 ---TypeError : Cannot read property 'getResponse' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46750283/

相关文章:

angularjs - http ://localhost:3000/#!/为什么我在本地主机链接中得到 "#!/"。

javascript - ng-repeat 中带有复选框的动态 ng-model

javascript - 匹配 CSS RGB 颜色值

javascript - 尝试在 SharePoint 环境中使用 AngularJS DateRangePicker 时出现未定义错误

python - flask 在运行时不读取 bootstrap.css (mac)

javascript - 使用 array.push() 后如何为数组中的每个元素应用自定义类?

javascript - 如何避免在加载 api 时 AngularJS ui 网格显示 'no-data' 消息

javascript - 如何在 Google Charts 中的 x 轴上显示两个标题?

javascript - 根据 ViewBag 值运行 JavaScript block

javascript - 扩展 jQuery UI Accordion 后,谷歌地图不再以其他 map 为中心