0

我正在使用 Angular Js、MongoDb 实现单页应用程序(SPA)。我正在使用带有承诺的休息电话。在用于开发的 Mozila 浏览器 Chrome 中休息调用工作正常。但是休息电话在 IE-11 中不起作用。它给了我500 Internal Server Error

我无法找到休息电话线。因为它没有显示行号。但我可以分享休息调用的示例代码。

  Rh.all('apicall').get('dbname/_aggrs/'+ ar_dep +'?avars=' + query).then(function (d) {

       console.log("response data");

      });

上面的调用不是打印控制台。因为它在 IE-11 中被破坏,但这些其余的调用在其他浏览器中工作正常。如果我把直接路径不带变量,那么它在 IE-11 中工作。 下面的工作休息电话在此处输入图像描述

Rh.all('apicall').get('dbname').then(function (d) {

           console.log("response data");

          });

控制台中的网络(IE-11) 在此处输入图像描述

铬合金 在此处输入图像描述

我正在更新我的问题。因为我发现解析url有些不同,因为restheart。

铬:

rh.all('apicall').get('dbname/_aggrs/'+ ar_dep +'?avars=' + 查询)

解析后

localhost:8080/apicall/dbname/_aggrs/rout?avars={%22routes%22:%22US%22}

在查询对象中,我有路线:我们。所以在 chrome 中它会解析 %22--%22 位置的“”。

在 IE-11 中

rh.all('apicall').get('dbname/_aggrs/'+ ar_dep +'?avars=' + 查询)

解析后

localhost:8080/apicall/dbname/_aggrs/rout?avars={"routes":"US"}

在 IE-11 中,它不会将双引号解析为 %22 %22。它与字符串解析相同。

4

1 回答 1

1

500 错误始终与服务器有关。这些症状可能只出现在特定的浏览器上,但发生故障的是服务器;发送到服务器的请求导致服务器端代码以某种方式失败。

错误 500 本身就太笼统了;在不了解有关错误的更多详细信息的情况下,总是很难诊断,坦率地说,我无法在这里给您明确的答案。

最后,您应该排除明显的问题,并检查您在 IE 中的浏览器设置。具体来说,任何可能导致它无法与服务器正确通信的设置。例如,确保 cookie 已启用并且工作正常。

但是您应该做的第一件事是与 API 的供应商或开发人员讨论,因为他们将有权访问服务器错误日志,并且如果他们的代码抛出 500 错误,他们会想知道这一点。

但是,如果您确实想在最后进行调查,那么它特定于一个浏览器的事实就是一个线索。如果其他浏览器都在工作,那么这告诉我们的是,这个浏览器(IE11)正在发送请求,其中包含与其他浏览器不同的内容,并且触发服务器端代码失败。这为我们提供了一些可以在调查中使用的东西。

所以首先要做的是检查所有浏览器中的请求。在 Chrome、Firefox 和 IE 中使用 F12 开发工具,然后在这三个工具中都进行了相同的调用,它在 FF 和 Chrome 中有效,但在 IE11 中无效。

在开发工具中,您现在应该能够检查所有三个的请求详细信息。比较它们。

首先查看请求数据——即发送的实际查询字符串。如果存在差异,请考虑这些差异中的任何一个是否可能导致错误。有些东西可能很明显;例如,如果 IE 截断了变量或类似的东西。如果这能解决问题,那就太好了。

如果它没有帮助,那么您需要更详细地查看。也许有一些差异,但它们看起来不应该破坏任何东西?现代浏览器开发工具允许您编辑和重新发送请求,因此请尝试在 Chrome 或 Firefox 的开发工具中编辑请求,并使参数与 IE 中失败的参数相同。现在尝试重新发送该请求。如果幸运的话,这将导致请求在其他浏览器中失败,这将允许您显示特定的数据集是问题(而不是特定的浏览器)。您提到它是第三方 API,因此您需要与 API 供应商讨论以找出该查询破坏其 API 的原因。

如果此时您仍未发现问题,并且您在两个浏览器中发送相同的查询,并且您以同一用户身份登录,那么下一步是查看请求标头。

有一个请求标头肯定会有所不同:用户代理字符串。但也可能有其他人。再次尝试重新发送在 Chrome 中有效的请求,但使用 IE 中失败请求的标头(包括 UA 字符串)。现在请求是否在 Chrome 中失败?如果是这样,请缩小导致失败的不同标头的范围。

同样,如果这允许您找到导致问题的一组特定请求数据和标头,那么您将需要与 API 供应商讨论。

如果所有这些都没有帮助,请尝试查看 cookie。您已经检查过 cookie 是否正常工作,所以现在这似乎是一个很长的尝试,但再次比较浏览器之间的 cookie,看看它们是否有任何明显不同的地方。

我希望以上内容足以帮助您诊断问题。

于 2017-11-19T16:41:34.997 回答