是否有任何以编程方式确定Internet Explorer当前安全区域设置的方法?
我想知道我的网站何时会因为IE安全策略而阻止XMLHttpRequest ActiveX控件,但在网站实际尝试创建它之前会导致黄色条显示在顶部(说"为了帮助保护您的安全性" ,Internet Explorer限制此网页运行可以访问您的计算机的脚本或ActiveX控件.")
谢谢.
据我所知,每个HTTP请求都使用自己的TCP连接(如果我错了,请纠正我).所以,假设有两个当前连接到同一台服务器.例如,客户端javascript代码在获得对第一个的响应之前,使用XMLHttpRequest对象一个接一个地触发几个AJAX POST请求.所以我们讨论的是同一个服务器的两个连接,每个连接等待一个响应,以便将它路由到每个单独的回调函数.
现在这是我不明白的事情:TCP数据包包括源和目标IP和端口,但这两个连接不会有相同的src和dest ip地址,以及端口80?如何区分数据包并将其路由到适当的位置?是否与每个连接不同的数据包序列号有关?
我们的Web应用程序中的一个页面使用jQuery的ajax()方法大约每10秒轮询一次服务器以获取新数据.我们通常有几百名用户同时查看此页面,因此我们的服务器每秒会收到多个请求.负载不是任何问题.
对于我们访问者中的一小部分,jQuery ajax()调用会偶尔触发它的错误事件.大多数这些错误事件都是明显的错误(例如访问者遇到网络问题时超时),但是这些错误中的一小部分我很难找到原因,而且我有点困惑.
我们正在连接一个像这样的全局错误监听器
$.ajaxSetup({
timeout: oursettings.timeout,
error: function(xhr, status, e){
// error handling goes here
}
});
Run Code Online (Sandbox Code Playgroud)
对于这个特定的错误子集,jQuery给我们带来了status一些"error".通过jQuery源代码(特别是第3574行)读取错误仅在XmlHttpRequest readystate具有值4(意味着它DONE)并且HTTP响应状态超出成功值(< 200或>= 300)时使用此值抛出.
但是,当我们检查XmlHttpRequest对象本身时,我们发现它的(HTTP响应)状态为0.根据XHR规范,当"错误标志为真"时,应设置状态0 .
这是我真的很困惑的地方,因为XmlHttpRequest规范中关于"错误标志" 的唯一其他事情是
DONE状态具有相关的错误标志,指示某种类型的网络错误或堕胎.它可以是true或false,初始值为false.
规范没有说明保留这个错误标志的属性或位置(即,它是否可用xhr.error?).
所以我想我的问题归结为:这将是正确的我们的Ajax的错误处理代码假设击中我们的错误处理程序与jQuery的状态的任何事件"error"和xhr.status的0,以引起仅通过"网络错误或流产"?
是否有任何其他条件或任何其他人看到的可能导致XmlHttpRequest readystate DONE (4)的HTTP响应状态为0?我希望能够排除服务器端错误的任何可能性(因为我们的服务器端日志没有显示任何内容),并且要更改错误处理逻辑以不将此方案视为致命错误(这导致用户看到一堆大红色警报类型错误消息).
使用jQuery的$ .ajax()函数.如果请求被故意中止,或者服务器关闭(没有响应),则会出现相同的结果;
这就是在xmlHttpRequest.status = 0和xmlHttpRequest.readyState = 4的情况下触发"成功"处理程序.
(我通过关闭IIS模拟失败的请求,然后针对已经"关闭"的网站执行xmlHttpRequest)
所以我的问题是如何确定中止请求或由于服务器没有响应而导致真正失败的请求(因为服务器可能已关闭)之间的区别,因为两种情况似乎都给我相同的状态/ readyState?
编辑 更准确我想知道如何在ajax上调用.abort()函数后阻止调用"success"处理程序.
我已经重新措辞,以反映这一点.
我有一台服务器位于example.com运行apache,提供我的静态html文件.
我也有一个json服务位于api.example.com运行python与cherrypy.
用户请求example.com并获取索引html页面.在那个页面上,我使用jquery向json服务发出ajax请求.document.domain返回example.com
$.ajax({
type: 'GET',
url: 'http://api.example.com/resource/',
dataType: 'json',
success: successCallback,
error: errorHandler
});
Run Code Online (Sandbox Code Playgroud)
但是,我无法在firebug中看到ajax请求的响应主体.这让我相信浏览器(FF)不支持这一点.
实现这一目标的最佳方法是什么?如果可能的话,我宁愿不在example.com的apache后端使用任何代理.
我正在开发一个Chrome/Chromium扩展程序,它将从学校系统中读取成绩等级的学校成绩.问题是该网站不记得登录用户.因此,我不能使用AJAX.
只有当我在其他标签上登录该页面时.但我想在后台自动登录该页面.解决方案可能是iframe标签,但Chrome/Chromium不允许我使用iframe内容进行阅读和操作.是否有任何解决方案如何作为登录用户在页面中操作?谢谢
google-chrome xmlhttprequest cross-domain google-chrome-extension
我正在尝试将Google Chrome扩展程序的XHR请求发送到另一个域.这样可以正常工作,但我需要发送带有请求的域cookie.有什么办法吗?
我想在UI上显示jpeg图像.为此,我请求我的服务(GET方法),然后我转换为base 64:
$http({
url: "...",
method: "GET",
headers: {'Content-Type': 'image/jpeg'}
}).then(function(dataImage){
var binary = '';
var responseText = dataImage.data;
var responseTextLen = dataImage.data.length;
for (var j = 0; j < responseTextLen; j+=1) {
binary += String.fromCharCode(responseText.charCodeAt(j) & 0xff)
}
base64Image = 'data:image/jpeg;base64,' + window.btoa(binary);
});
Run Code Online (Sandbox Code Playgroud)
最后,我的浏览器告诉我图像已损坏或被截断.所以我尝试使用overrideMimeType('text/plain; charset = x-user-defined')创建XMLHttpRequest,它可以工作:
var xhr_object = new XMLHttpRequest();
xhr_object.overrideMimeType('text/plain; charset=x-user-defined');
xhr_object.open('GET', '...', false);
xhr_object.send(null);
if(xhr_object.status == 200){
var responseText = xhr_object.responseText;
var responseTextLen = responseText.length;
var binary = ''
for (var j = 0; …Run Code Online (Sandbox Code Playgroud) 注意: 我更换了我的投票系统,
websockets但我仍然想知道上述问题的答案.
我正在尝试减少传统轮询消息系统的AJAX请求,但我不知道如何获取它:
$chatbox = $("#chatbox");
setInterval(function(){
// I send the sha1 of the chatbox html content to verify changes.
$.post("post.php", {checksum: hex_sha1($chatbox.html())}, function (data, status) {
switch (status) {
case "success":
// If version of "post.php" checksum is different than mine (there are changes) data isn't empty; I assign data as the new content of the chatbox.
if(data){
$chatbox.html(data);
$chatbox.scrollTop($chatbox[0].scrollHeight);
}
break;
default:
$chatbox.html('Connection error...');
break;
}
});
}, 1000);
Run Code Online (Sandbox Code Playgroud)
好吧,如你所见,我使用setInterval()with 1000 …
我用这个代码从数据URI XMLHttpRequest生成Blob:
function dataUrlToBlob(dataUrl, callback) {
var xhr = new XMLHttpRequest;
xhr.open( 'GET', dataUrl);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
callback( new Blob( [this.response], {type: 'image/png'} ) );
};
xhr.send();
}
Run Code Online (Sandbox Code Playgroud)
用法:
dataUrlToBlob('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2NkAAIAAAoAAggA9GkAAAAASUVORK5CYII=', callback);
Run Code Online (Sandbox Code Playgroud)
除Safari外,所有浏览器都能正常运行.它抛出这样一个错误:
[错误] XMLHttpRequest无法加载数据:image/png; base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2NkAAIAAAoAAggA9GkAAAAASUVORK5CYII =.仅支持HTTP的跨源请求.
问题是,有没有办法让这种方法在Safari中运行?
xmlhttprequest ×10
javascript ×4
jquery ×3
http ×2
ajax ×1
ajax-polling ×1
angularjs ×1
cherrypy ×1
cross-domain ×1
get ×1
html ×1
mime-types ×1
php ×1
safari ×1
security ×1
sockets ×1
tcp ×1