标签: xmlhttprequest

最佳方法:Access-Control-Allow-Origin多个源域

这个问题之前已经在这里提出并给出了一系列好的答案,主要是: Access-Control-Allow-Origin多个原始域?

但是,在应该采用的核准方法方面似乎存在着解释上的差距.通过W3文档阅读,我认为这是一种指导冲突.

首先,我们在许多先前的答案中看到了给出答案的正确方法,该答案规定主机服务器必须动态回显给定的"Origin"(如果它出现在预定义的"白名单"上). http://www.w3.org/TR/cors/#resource-implementation

然而,所使用的许多答案和方法也提到了空格分隔列表,该列表也可以用作将多个"起源"传递给允许的方法.如果我们看一下http://www.w3.org/wiki/CORS_Enabled上的另一篇W3文档,我们在页面的第一部分看到了一个例子:

 Access-Control-Allow-Origin: http://example.com:8080 http://blah.example.com http://foo.example.com
Run Code Online (Sandbox Code Playgroud)

在这两种方法中,我同样很乐意将其纳入其中,但是可能会有大量的URL需要列入其中,因此我希望确保我第一次正确地执行此操作.如果有人对上述两种方法有任何见解,我将非常感谢您在选择中听到决定,以及是否有可能错过的推荐方法的明确指南.

http xmlhttprequest cross-domain cors

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

即使在调用abort之后浏览器也会等待ajax调用完成(jQuery)

我有一些(可能)长时间运行的ajax调用,如果用户导航到另一个页面,我想中止.以下jQuery代码在导航离开页面时调用所有挂起的XMLHttpRequest对象的中止:

$.ajaxSetup({
    beforeSend: function(xhr) {
        $(window).bind('beforeunload', function() {
            xhr.abort();
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

在测试用例中,我强制在被调用的服务器端操作上等待10秒.使用Firebug,我确认上面的代码确实导致所有挂起的ajax调用在我单击页面上的任何链接时立即停止.但是,浏览器仍然等待整整10秒,然后再转到下一页.IE似乎表现出相同的行为.这是一个已知的浏览器行为吗?在这种情况下,我能做些什么让用户立即离开页面?提前致谢.

javascript jquery xmlhttprequest onbeforeunload abort

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

NETWORK_ERROR:XMLHttpRequest异常101

我收到此错误

NETWORK_ERROR:XMLHttpRequest异常101

尝试从一个站点获取XML内容时.这是我的代码

    var xmlhttp; 
    if(window.XMLHttpRequest) { 
        xmlhttp = new XMLHttpRequest();
    }

    if (xmlhttp==null) {
        alert ("Your browser does not support XMLHTTP!");
        return;
    }

    xmlhttp.onReadyStateChange=function() {
        if(xmlhttp.readyState==4) {
            var value =xmlhttp.responseXML;
            alert(value);
        }
    }
    xmlhttp.open("GET",url,false);
    xmlhttp.send();
    //alert(xmlhttp.responseXML);
}

xmlhttp.open("GET",url,false);
xmlhttp.send(null);
Run Code Online (Sandbox Code Playgroud)

有没有人有办法解决吗?

ajax xmlhttprequest

29
推荐指数
2
解决办法
9万
查看次数

对于在"/转换"中意外结束的URL,请求格式无法识别1-2天后发生

我正在使用Microsoft.XMLHTTP调用调用web服务:

var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("POST", "/xxx/Converter.asmx/Convert", false);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send("conversionFolder=" + escape(conversionFolder));
if (xmlhttp.status == 200) {
  xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async = "false";
  xmlDoc.loadXML(xmlhttp.responseText);
  ... more stuff ...
  return str;
}
else {
  alert(xmlhttp.statusCode + " - " + xmlhttp.statusText);
}
Run Code Online (Sandbox Code Playgroud)

当我记得在本地web.config中添加HttpPost协议时,一切正常.

<?xml version="1.0"?>
<configuration>
  <appSettings/>
  <connectionStrings/>
  <system.web>
    <webServices>
      <protocols>
        <add name="HttpPost"/>
      </protocols>
    </webServices>
    <compilation debug="false"></compilation>
  </system.web>
  <system.codedom>
  </system.codedom>
  <!--
    The system.webServer section is required for running ASP.NET AJAX under Internet
    Information Services 7.0.  It is not …
Run Code Online (Sandbox Code Playgroud)

asp.net https web-services xmlhttprequest asmx

29
推荐指数
1
解决办法
9977
查看次数

XMLHttpRequest的getResponseHeader()的限制?

我注意到XMLHttpRequest.getResponseHeader()返回的实际标头的结果并不总是匹配(如果请求是以常规方式进行的).

例如,假设我正在提出xhr请求https://foo.example.com/api/resource/100.在Chrome的开发者控制台中,在"网络"下,我可以看到正在做出的响应 - 我还可以看到所有响应标头(例如,10).但是(复制粘贴的控制台):

> response
  XMLHttpRequest
> response.getAllResponseHeaders();
  "content-type: text/html
  " 
Run Code Online (Sandbox Code Playgroud)

对哪些标题可用有任何限制?这取决于响应类型吗?我记得为404s获得了一套完整的标题,但这只是400s的标题.

是什么赋予了?

javascript http xmlhttprequest

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

IE10/IE11在清除缓存后中止后发布Ajax请求,并显示错误"网络错误0x2ef3"

SCRIPT7002:XMLHttpRequest:网络错误0x2ef3,由于错误00002ef3无法完成操作

目前没有有效的解决方案.

更新:也在IE11上注意到.

经过越来越多的调查,我得到了这样的结果:

  1. 问题是我的应用程序特有的,它不会发生在Facebook上.
  2. 这个问题与每个主机的最大请求数无关(我做了充斥服务器的示例页面,IE10能够同时处理多达8-10个请求,在我的应用程序中我也尝试连续执行ajax请求,它也失败了).
  3. 该问题特定于POST请求.
  4. 问题并不是特定于使用的JS库(我尝试从控制台直接使用XMLHttpRequest也失败了).
  5. 失败发生在xhr.send(),xhr.readyState = 4和xhr.onreadystatechange触发之后.
  6. 该故障与任何内容类型,正确请求或服务器配置无关.它只是客户端,请求虚拟页面将失败,只有最小的XHR,只有xhr.open和xhr.send.
  7. 它主要发生在清除浏览器缓存之后.
  8. 在POST之前执行GET请求不能解决此问题.

我的问题是:

  1. 浏览器缓存如何影响POST ajax请求?
  2. 是否有任何机构与IE开发人员联系,告诉我们这个错误'网络错误0x2ef3'映射到了什么?

现在,我正在做的临时解决方案是,如果HTTP状态代码为零,则只重试最多3次.但它非常难看,因为即使上传请求有时也会失败,并且对于那些重试的请求变得缓慢,有时需要额外的100毫秒.

重现步骤:

  1. 确保禁用fiddler或代理.
  2. http://ie10.laiths.name/#!login
  3. 打开IE10控制台,删除浏览器缓存.
  4. 尝试此无效登录:random@rand.com/random
  5. 3-4次(清除缓存/无效登录)后,您将看到以下错误:SCRIPT7002:XMLHttpRequest:网络错误0x2ef3,由于错误00002ef3无法完成操作.

我的IE版本:

  • Win7 IE10版本:10.0.9200.16618
  • 更新版本:10.0.6(KB2838727)

现在我正在解决它,如果browser is IE10&& Request is POST&& 重试最多3次HTTP status code is 0.

如果有人可以帮我删除我丑陋的解决方案,我将不胜感激,因为有了这样的解决方案,即使请求进入服务器并且它返回0我也会重试(我试图通过测量xhr.send之间的时间来避免这种情况)和它的回调但它不可靠),如果IE10在comptMode中,如果IE11有同样的问题,添加到那个性能,它将占用我的机器〜每次重试之间的170ms.

javascript ajax post xmlhttprequest internet-explorer-10

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

从XMLHttpRequest清空responseText

我编写了一个运行良好的XMLHttpRequest,但返回一个空的responseText.

javascript如下:

  var anUrl = "http://api.xxx.com/rates/csv/rates.txt";
  var myRequest = new XMLHttpRequest();

  callAjax(anUrl);

  function callAjax(url) {
     myRequest.open("GET", url, true);
     myRequest.onreadystatechange = responseAjax;
                 myRequest.setRequestHeader("Cache-Control", "no-cache");
     myRequest.send(null);
  }

  function responseAjax() {
     if(myRequest.readyState == 4) {
        if(myRequest.status == 200) {
            result = myRequest.responseText;
            alert(result);
            alert("we made it");
        } else {
            alert( " An error has occurred: " + myRequest.statusText);
        }
     }
  }
Run Code Online (Sandbox Code Playgroud)

代码运行正常.我可以走过去,我得到readyState == 4和状态== 200但是responseText总是空白.

我收到错误调度的日志错误(在Safari调试中):getProperties,我似乎无法找到引用.

我在本地和远程服务器上运行Safari和Firefox中的代码.

放入浏览器时的URL将返回字符串并提供状态代码200.

我在Mac Widget中向相同的URL写了类似的代码,运行正常但是浏览器中的相同代码永远不会返回结果.

javascript ajax xmlhttprequest

28
推荐指数
3
解决办法
10万
查看次数

如何判断XMLHTTPRequest是否命中浏览器缓存

如果可以告诉(在javascript执行中)GET XMLHTTPRequest是否命中浏览器缓存而不是从服务器获取响应?

javascript xmlhttprequest browser-cache

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

Internet Explorer 11不会在CORS请求中添加Origin标头?

我的问题取决于我认为的几个假设.

假设nr 1:原始标题

Origin头是由浏览器需要在CORS(跨源资源共享)请求被投入.

维基百科:

要启动跨源请求,浏览器会使用Origin HTTP标头发送请求.

HTML5岩石:

首先要注意的是,有效的CORS请求始终包含Origin头.此Origin标头由浏览器添加,不能由用户控制.

W3:

如果请求URL源与原始URL源不同,请将源origin设置为全局唯一标识符[..].

假设2:Internet Explorer 10+支持CORS

请参阅caniuse.com并使用谷歌获取数百种不同类型的来源声称支持.

假设nr 3:不同的端口是不同的起源

使用不同端口号的资源被认为具有不同的来源:

维基百科

当且仅当所有这些值完全相同时,才认为两个资源具有相同的来源.[..]失败 - 相同的协议和主机但不同的端口.

Mozilla开发者网络

如果协议,端口(如果指定了一个端口)和主机对两个页面都相同,则两个页面具有相同的原点.

问题:

Origin在向同一域"localhost"发出CORS请求但使用不同端口(从8411到8080)时,Internet Explorer 11不会发送标头.Opera,FireFox和Chrome会发送Origin标头.然而每个人都在说Internet Explorer 10+支持CORS吗?

internet-explorer xmlhttprequest cross-domain cors

27
推荐指数
1
解决办法
3万
查看次数

在chrome dev工具中隐藏401 console.error,在fetch()调用中获取401

我有一些代码在哪里进行提取调用.这利用了现代chrome/firefox中内置的window.fetch api.

代码有时会遇到401:未经授权的响应.这是正常的,我希望它被忽略,我可以用代码的流程做.但是,当我尝试运行它时,Chrome确实会显示一个难看的console.error消息.

我如何编程地防止此控制台错误显示在所有计算机上的开发控制台中(即,没有chrome dev过滤器或tampermonkey类型插件).

这是一个可以解决的样本:

fetch("http://httpstat.us/401", {requiredStatus: 'ok'})
    .then(function() {
        console.log("pass!");
    }).catch(function() {
        console.log("fail!");
    });
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

javascript xmlhttprequest fetch-api

27
推荐指数
1
解决办法
7085
查看次数