Php 使用ajax从Web服务器返回数据
我用这段代码用ajax上传文件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.
$('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
,因为我很笨。有人能很快解决这个问题吗?