标签: xmlhttprequest-level2

XMLHttpRequest 2下载进度事件仅触发一次

我试图通过以下代码获取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下工作).

我做错了什么还是不正确支持?

javascript ajax html5 xmlhttprequest-level2

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

在Android股票浏览器中没有XMLHttpRequest 2进展

我有一个工作文件上传表单,它使用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

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

JS ProgressEvent仅在完成时触发

我在上传进度条正常工作时遇到了一些问题.

根据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 upload jquery progress xmlhttprequest-level2

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

如何在 JavaScript 中比较两个 blob?

我使用下面的代码在 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)

javascript xmlhttprequest xmlhttprequest-level2

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

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

如何从Opera中的Javascript访问8位二进制数据?

这个问题是关于IE到Opera 12浏览器的StackOverflow问题的扩展.

根问题是geoxml3处理kmz(压缩的kml)文件中的问题.

Opera 12中失败的示例

正在使用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的已知错误吗?

javascript opera xmlhttprequest xmlhttprequest-level2

0
推荐指数
1
解决办法
1120
查看次数

处理多个XMLHttpRequest调用f

注意:我有两个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)

ajax xmlhttprequest-level2

0
推荐指数
1
解决办法
7613
查看次数