【问题标题】:Angularjs url is being changed when using $http.get().then()使用 $http.get().then() 时正在更改 Angularjs url
【发布时间】:2017-12-29 10:00:12
【问题描述】:

我有以下代码:

  1. 首先我记录 url 并获得所需的 url:variants/images/30808708?ssl=true

    var myUrl = self.baseUrl + 'images/' + self.currentItem.variants[variant].imageId + '?ssl=true'
    console.log(myUrl);  //prints: variants/images/30808708?ssl=true
    
  2. 第二次我拨打http.get(myUrl).then(...) 电话:

    $http.get(myUrl)
    .then(function(data) {
      //do something...
    }, function(e) {
      console.log('err', e); //error prints undefined
    });
    

    在第二段代码中,url 的开头似乎是这样的两倍/三倍:

GET http://localhost:8080/variants/199variants/variants/images/30808708?ssl=true 404 (Not Found)

注意variants/199variants/variants/

我不知道这种重复来自哪里。最近我将应用程序从 1.3 更新到 1.5,并删除了 hashbang #由于我之前遇到的一些 canonicalUrl 错误。不确定这是否相关

这是我在控制台中遇到的错误:

vendor.min.js:119 SyntaxError: Unexpected token < in JSON at position 0
    at JSON.parse (<anonymous>)
    at Cc (vendor.min.js:16)
    at gc (vendor.min.js:93)
    at vendor.min.js:94
    at q (vendor.min.js:7)
    at md (vendor.min.js:94)
    at f (vendor.min.js:96)
    at vendor.min.js:132
    at m.$eval (vendor.min.js:147)
    at m.$digest (vendor.min.js:144)
(anonymous) @ vendor.min.js:119
vendor.min.js:119 Broken interceptor detected: Config object not supplied in rejection:
 https://github.com/chieffancypants/angular-loading-bar/pull/50

更新

我跟踪了第一个错误堆栈跟踪,似乎有时后端在找不到数据时返回 html,它传递了以下调用的 typeof === 字符串:

D(a) 是:

所以似乎错误是在 JSON.parse('

【问题讨论】:

  • 检查您的服务器端 API 是否返回正确的 JSON 响应。
  • 感谢@MohammedGadi,这似乎是错误,请您阅读我的更新。所以解决方案是告诉后端返回 JSON 或更改 JSON.parse() 原型?你怎么看?
  • 转到您的 chrome 网络选项卡并通过单击 url 查看响应。
  • 顺便问一下你是用asp.net mvc作为后端吗?
  • @MohammedGadi ,后端人员正在使用 Java。响应是一个 html: Apache Tomcat/8.0.14 (Debian) - Error re...

标签: angularjs angularjs-directive angular-ui-router angularjs-scope angular-promise


【解决方案1】:

您的 self.baseUrl 还应包含主机地址(以及端口号),否则它将从托管您的应用程序的位置获取主机地址。 因此,请更新您的基地址以包含带有主机名的完整地址。

【讨论】:

  • 所以我将其修改为:self.baseUrl = 'http://localhost:8080/variants/'; 现在我得到了同样的错误,但包含 localhost:http://localhost:8080/http://localhost:8080/variants/202http://localhost:8080/variants/http://localhost:8080/variants/215
  • 在我的应用程序中,我测试了同样的东西并且它有效,请试试这个,$http.get('ip.jsontest.com/') .then(function successCallback(response) { deferred.resolve(response.data) ; });这是获取请求,它将向您发送您的 IP 地址,请在 Chrome 浏览器的网络选项卡中的开发控制台中检查此内容,如果您的请求响应正确,则通过引用此内容更新您自己的代码。
猜你喜欢
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多