Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用ajax从Web服务器返回数据_Php_Jquery_Ajax - Fatal编程技术网

Php 使用ajax从Web服务器返回数据

Php 使用ajax从Web服务器返回数据,php,jquery,ajax,Php,Jquery,Ajax,我用这段代码用ajax上传文件 $('form').submit(function(e) { e.preventDefault(); var fd = new FormData(this); $.ajax({url: $(this).attr('action'), xhr: function() { // custom xhr (is the best) var xhr = new XMLHttpRequest(); //load xhr.

我用这段代码用ajax上传文件

$('form').submit(function(e) {
  e.preventDefault();
  var fd = new FormData(this);
  $.ajax({url: $(this).attr('action'),
          xhr: function() { // custom xhr (is the best)
    var xhr = new XMLHttpRequest();
    //load
    xhr.upload.addEventListener("load", function(evt) {
      $("#msg").text(evt.target.responseText);
    }, false);
    return xhr;
  },
  type: 'post',
  processData: false,
  contentType: false,
  data: fd,
  success: function(data) {
    // do something...    
  }});
});
上传完成后,我想在#msg div中显示一条消息。消息是使用php在服务器端打印的。通常
evt.target.responseText
包含来自服务器的数据,但它包含
[object-XMLHttpRequestProgressEvent]
(反过来写入#msg)。我尝试打印
evt.responseText
evt.response
,但两者都返回
[object XMLHttpRequestProgressEvent]
将行移动到“success”回调函数块

AJAX请求调用或其底层XMLHttpRequestObject(XHR)调用是异步执行的。“加载”是一个3级事件,通知调用脚本执行进度。可以查询evt对象的用例,例如文件上传程序progressbar

“success”事件映射到readyState==4,由onreadystatechange回调函数检查

使用原始XHR:

xhr = new XMLHttpRequest();
xhr.open('GET', your_url, true);
xhr.onreadystatechange=function(){
  if (xhr.readyState==4){
    document.getElementById('res').innerHTML=xhr.responseText;
  } else {
    document.getElementById('res').innerHTML='loading...';
  }
}

xhr.send(null);
实际上,您可以在XHR调用之前显示加载文本

跟踪文件上载进度不同:

xhr.upload.onprogress=function(e){
    if (e.lengthComputable)
       document.getElementById('res').innerHTML=Math.round(e.loaded*100/e.total)+'%';
    else document.getElementById('res').innerHTML='uploading...';
};

xhr.onload=function(e){
  //display success message
}

确保xhr.upload不为null。如果是,那么浏览器上就没有3级AJAX支持。

我在成功回调中进行了测试,但我想在“进行中”事件中从服务器获取数据。让我编辑答案以反映这一点。。。但在加载过程中,您希望显示什么。部分结果或“加载”通知/动画?我想显示上传的剩余时间。在服务器端计算互联网速度。因此,我想在每个ajax请求中获得互联网速度。您应该提到它是用于文件上传的;因为上传进度的处理是不同的。让我再次更新答案…使用经过的时间和进度百分比来计算,而不是测量网络速度。速度在数学上被抵消了。让上传程序先运行一段时间,以收集更准确的统计数据。它还可以防止零除法。有一个原因,你见过的许多上传程序在一段时间后只会给你一个估计值。我不小心把标题改为
returndata from webserver with java
,而不是
Return data from webserver with ajax
,因为我很笨。有人能很快解决这个问题吗?