我试图通过以下代码获取ajax请求的进度:
var xhr = new XMLHttpRequest();
xhr.addEventListener('progress', function(event) {
console.log(event.loaded / event.total);
},
false);
xhr.addEventListener('load', function() {
console.log('load');
},
false);
xhr.open('get', 'test.php', true);
xhr.send();
Run Code Online (Sandbox Code Playgroud)
问题是,progress事件只在load事件发生之前触发一次(也就是说,在Webkit中,它似乎不能在Gecko下工作).
我做错了什么还是不正确支持?
我有一个工作文件上传表单,它使用XMLHttpRequest 2将文件上传到Transloadit(文件处理服务).在Firefox和Chrome中,无论是桌面还是Android,都会正确触发进度事件.但Android(4.0)股票浏览器不会触发这些事件,因此我的进度条对我网站的用户不起作用.据说Android自3.0以来支持XHR2和ProgressEvent,所以我不知道发生了什么.
代码是:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Upload test</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<link href="/assets/application.css" media="all" rel="stylesheet" type="text/css" /> <!-- twitter bootstrap -->
<script type="text/javascript">
var onprogress = function(e)
{
var $status = $('.status');
$status.text('onprogress: ' + (e.loaded / e.total) * 75 + '<br>');
if (e.lengthComputable) {
setProgress((e.loaded / e.total) * 75);
}
}
var setProgress = function(percent) {
percent = percent+'%';
var $progressBar = $('.progress .bar');
var $status = $('.status');
$progressBar.css('width', percent);
$progressBar.text(percent); …Run Code Online (Sandbox Code Playgroud) javascript html5 xmlhttprequest android-browser xmlhttprequest-level2
我在上传进度条正常工作时遇到了一些问题.
根据XMLHttpRequest Level 2规范,我为loadstart附加了事件监听器,并且进展如下:
var xhr = $.ajaxSettings.xhr();
xhr.upload.addEventListener('loadstart', function(e) {progressCallback(0);});
xhr.upload.addEventListener('progress', function (e) {
progressCallback(e.loaded / e.total);
});
$.ajax({
url: url,
type: 'POST',
processData: false,
contentType: false,
data: formData,
xhr: function () {
return xhr;
}
}).done(function (data) {
// Finish stuff
})
Run Code Online (Sandbox Code Playgroud)
文件已正确上传,但只有在请求以100%完成后才会调用进度监听器(e.total == e.loaded)
上面的代码有什么问题,或者是否有必要以任何特殊方式配置服务器?
我使用下面的代码在 JavaScript 中加载两个 blob 文件。
我想比较一下它们是否完全相同。
(blob1 === blob2) 返回 false,即使每个 blob 的报告大小为 574 字节。我究竟做错了什么?
getHTTPAsBlob(url, callback) {
let cacheBust = Math.random().toString()
url = url + '?&cachebust=' + cacheBust
let xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'blob';
xhr.onload = function (e) {
if (xhr.status == 200) {
// get binary data as a response
let fileData = this.response;
let contentType = xhr.getResponseHeader("content-type")
var reader = new FileReader()
reader.onload = (e) => {
console.log(reader.result)
console.log(fileData)
callback(null, {
Body: …Run Code Online (Sandbox Code Playgroud) 使用HTML5的xmlhttprequest级别2的最大文件上载大小是多少?
这个问题是关于IE到Opera 12浏览器的StackOverflow问题的扩展.
根问题是geoxml3处理kmz(压缩的kml)文件中的问题.
正在使用ZipFile.complete.js的修改版本中的TypedArrays处理二进制数据
传输二进制文件后,在Opera 12中未正确填充Uint8Array,就好像数据被导入为16位元素一样.
请求配置如下:
this.req.responseType = 'arraybuffer';
this.req.overrideMimeType('text/plain; charset=x-user-defined');
Run Code Online (Sandbox Code Playgroud)
返回的值如下处理:
var fileContents = binStream.req.response;
binStream.length = fileContents.byteLength;
binStream.array = new Uint8Array(fileContents);
Run Code Online (Sandbox Code Playgroud)
在Opera 12中,前八个字节的填充如下:
0x004B0050; 给出十进制值4915280
但应该是:
0x4034B50; 小数值67324752.
这在Firefox,Chrome和IE中正常工作(具有解决方法).
有谁知道我怎么能说服Opera 12正确填充Uint8Array?或者一个解决方法,以便它可以工作(某种方式将16位字节数组转换为8位字节数组,尽可能有效地丢弃不需要的高8位)?这是Opera 12中最近实现TypedArray/XmlHttpRequest的已知错误吗?
注意:我有两个xmlHttp.open请求,其中包含两个不同的url字符串和两个onreadystatechange函数.我有一个html表单,有4个文本框和一个提交按钮.在用户将数据输入文本框1(id)和2(类型)后,我对这些框的onchange函数发出xmlHttp.open("GET",url,true); 使用类似"getQuestion.php?id = 12345&type = ABC"的网址.然后我的statechange函数获取返回的xml响应并将响应放入第3个文本框.所有这一切都很棒!我输入文字和文字弹出一个框,问我一个问题.
现在我试图做的是一旦第四个文本框被填入并点击了提交按钮,我希望提交功能再次使用xmlHttp.open.这一次,有一个新的url,在&answer ="XXXX"的url行上还有一个参数,其中XXXX是输入第4个框的内容.第二个url调用是因为调用了新的statechange函数.但是响应始终为空,我看到"回答是.".我认为这必须与多个网址有关,我没有正确设置,但我无法从"多个xmlHttpRequest"的网络搜索中找到任何内容.我已经附加了我的HTML和javacode块,它启动了失败的服务器请求和它的状态转换功能.我究竟做错了什么?还有一件事,如果我用参数直接调用我的第二个url(php脚本),我得到了我期望的响应.
<script language="Javascript">
/* Create a new XMLHttpRequest object to talk to the Web server */
var xmlHttp = false;
var attempts = 0;
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
xmlHttp = false;
}
}
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
}
function CheckAnswer() {
var myId = document.getElementById("FilerID").value;
var myType = document.getElementById("FilerType").value; …Run Code Online (Sandbox Code Playgroud)