相关疑难解决方法(0)

如何在Javascript中检测XMLHttpRequest()的其他类型的错误与交叉原点(CORS)错误

我试图检测XMLHttpRequest()由于交叉原始错误而不是错误请求而失败.例如:

    ajaxObj=new XMLHttpRequest()
    ajaxObj.open("GET", url, true); 
    ajaxObj.send(null);
Run Code Online (Sandbox Code Playgroud)

考虑4个网址案例:

情况1: url是正确设置access-control-allow-origin的有效地址

  • 示例:http://192.168.8.35Access-Control-Allow-Origin: *在标头中设置了一个服务器
  • 这很容易检测为ajaxObj.readyState == 4和ajaxObj.status == 200

情况2: url是现有服务器上的无效地址

  • 示例:http://xyz.google.com服务器响应的位置,但它不是有效请求
  • 这导致ajaxObj.readyState == 4和ajaxObj.status == 0

情况3: url是一个不存在的服务器IP地址

  • 示例:http://192.168.8.6在我的本地网络上没有任何响应
  • 这导致ajaxObj.readyState == 4和ajaxObj.status == 0

案例4: URL是一个有效的地址在访问控制允许来源是设置

  • 示例:http://192.168.8.247我在标头中没有 Access-Control-Allow-Origin: *设置的服务器
  • 这导致ajaxObj.readyState == 4和ajaxObj.status == 0

问题是:如何区分案例4(访问控制允许来源错误)和案例2和3?

在案例4中,Chrome调试控制台显示错误:

XMLHttpRequest cannot load http://192.168.8.247/. Origin http://localhost is not allowed by Access-Control-Allow-Origin.

如何在Javascript中识别该错误?

我试图找到一些迹象,ajaxObj但与案例2和3相比似乎没有什么不同.

这是我使用的简单测试:

<!DOCTYPE html PUBLIC "-//W3C//DTD …
Run Code Online (Sandbox Code Playgroud)

javascript ajax xmlhttprequest cors

51
推荐指数
4
解决办法
3万
查看次数

捕获XMLHttpRequest跨域错误

有没有办法捕获由于Access-Control-Allow-Origin提出请求而导致的错误?我正在使用jQuery,并且.ajaxError()永远不会调用处理程序集,因为请求永远不会开始.

有没有解决方法?

javascript jquery xmlhttprequest cross-domain cors

22
推荐指数
2
解决办法
3万
查看次数

对无效CORS请求的预期响应是什么?

CORS规范没有说明服务器应如何响应无效的CORS请求.例如,如果请求Origin无效,则CORS规范声明:"终止这组步骤.请求超出了本规范的范围." 其他错误情况也有类似的语言,例如请求无效的方法或标头.

在CORS错误的情况下,预期的响应应该是什么?我知道不同的服务器可能需要不同的行为.但我正在寻找标准响应或响应,如果服务器所有者不在乎可以接受.

cors

14
推荐指数
1
解决办法
2万
查看次数

CORS - Ajax错误函数将返回401的API请求的错误代码报告为0

背景

当身份验证(JWT)成功时,我在本地开发环境中使用CORS.我的客户端页面运行localhost并调用api.mycompany.com获取数据.我的api项目检查有效的JWT,如果通过,则返回内容.我花了一段时间才到这里,但这一切都很好.

如果我没有发送有效的JWT,则api会正确响应401(在Fiddler中检查),但客户端上的错误函数回调报告错误代码为0且状态为"错误".

我希望ajax回调函数检查错误的状态代码,如果是401,请检查标题名为location的标题(将包含uri到身份验证服务).

建立

  • (API项目)在本地IIS Express上运行MVC4项目的Visual Studio 2012实例

    • 本地主机文件将127.0.0.1映射到api.mycompany.com
    • 将项目 - >属性 - > Web设置为IIS Express
      • 使用本地IIS Express(已选中)
      • 项目网址: http://localhost:8080
      • 创建虚拟目录
      • 覆盖应用程序根URL(已选中)
      • 覆盖应用程序根URL: http://api.mycompany.com:8080
    • 在站点下的applicationhost.config中:

      <site name="StuffManagerAPI" id="1">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
          <virtualDirectory path="/" physicalPath="C:\Users\me\Documents\Visual Studio 2012\Projects\StuffManagerAPI\StuffManagerAPI" />
        </application>
        <bindings>
          <binding protocol="http" bindingInformation="*:8080:localhost" />
          <binding protocol="http" bindingInformation="*:8080:api.mycompany.com" />
        </bindings>
      </site>
      
      Run Code Online (Sandbox Code Playgroud)
  • (客户端项目)将Visual Studio实例与ASP.net空Web应用程序分开

    • 将项目 - >属性 - > Web设置为IIS Express
      • 使用本地IIS Express(已选中)
      • 项目网址: http://localhost:22628
      • 创建虚拟目录
  • 使用Google Chrome作为测试客户端

  • 使用Fiddler查看流量

我认为这些应该是我的概念验证中的重要部分.再次,CORS预检和数据检索都可以正常工作.这只是未经授权的案例无效.如果您还有其他需要,请告诉我.谢谢您的帮助.

API项目

授权标题处理程序

using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using …
Run Code Online (Sandbox Code Playgroud)

ajax jquery cors

9
推荐指数
1
解决办法
4606
查看次数

如何捕获No Access-Control-Allow-Origin错误?

我正在使用AngularJS,但我遇到了与JQuery相同的问题,并且在JavaScript中也是如此.如果我访问的远程服务器设置了Access-Control-Allow-Origin,则调用successerror方法.

当没有Access-Control-Allow-Origin时,这些都没有被调用,我只能在控制台中看到错误.有没有办法捕获No Access-Control-Allow-Origin我的JavaScript代码中的 错误?

如果您对用例感兴趣,我正在构建PyPi的前端https://pypi.python.org/在那里,您可以获得有关JSON格式的包的信息.(例如https://pypi.python.org/pypi/dspy/json).这些请求设置了Access-Control-Allow-Origin,但是如果我发送一个不在服务器上的包的请求(例如 https://pypi.python.org/pypi/dspyz/json),那么我得到No Access -Control-Allow-Origin因此我的JavaScript代码中没有调用任何内容.

更新

经过一些实验后,我发现该error方法被调用它只是因为我使用的代码存在一些问题并且误导我而引发异常.

javascript jquery json angularjs

7
推荐指数
1
解决办法
544
查看次数

有没有办法记录浏览器控制台错误

假设某个特定用户正在使用 Chrome,并且在 Chrome 的控制台中记录了一个运行时错误。我想知道那个错误是什么。目前,我必须联系特定用户,让他们打开控制台并告诉我错误是什么(或发送屏幕截图)。

有没有办法让我自动捕获或记录该错误(无论错误是什么)并将其发送到服务器?

作为后续问题,有没有办法为所有主要浏览器执行此操作?

javascript error-handling frontend runtime-error

5
推荐指数
1
解决办法
3057
查看次数

使用Fetch API时捕获“无法加载资源”

使用Fetch API时,我试图捕获与同一原始策略相关的许多错误,但未成功:

window.onerror = (message, file, line, col, error) => console.log(error)
window.addEventListener('error', (error) => console.log(error))

try {
    fetch('https://www.bitstamp.net/api/ticker/').catch(e => {
        console.log('Caugth error:')
        console.log(e)
        console.log(JSON.stringify(e))
    })
}
catch (e) {
    console.log('try-catch')
    console.log(e)
}
Run Code Online (Sandbox Code Playgroud)

我要捕获的错误仅出现在Web控制台中:

错误讯息

在此处查看代码示例:https : //github.com/nyg/fetch-error-test

如何捕获这些错误以提供屏幕消息?

编辑:实际执行获取的catch块。

window.onerror = (message, file, line, col, error) => console.log(error)
window.addEventListener('error', (error) => console.log(error))

try {
    fetch('https://www.bitstamp.net/api/ticker/').catch(e => {
        console.log('Caugth error:')
        console.log(e)
        console.log(JSON.stringify(e))
    })
}
catch (e) {
    console.log('try-catch')
    console.log(e)
}
Run Code Online (Sandbox Code Playgroud)
fetch('https://www.bitstamp.net/api/ticker/')
    .then(response => response.text())
    .then(pre)
    .catch(e => {
        pre(`Caugth error: …
Run Code Online (Sandbox Code Playgroud)

javascript error-handling cors fetch-api

5
推荐指数
1
解决办法
2668
查看次数