我试图了解在使用 XMLHttpRequest2 请求时会发生什么,如下所示:
xhr.send(文件)
这里的流程是什么?它是否首先将临时数据上传到某处然后发布?在我的经验中,请求仅在文件达到 100% 上传时发送(上传到哪里??)
我遇到了我找不到原因的问题。
我的上传适用于像 20mb 大小的文件,但是一旦它们变得更像 50mb 加上它就会失败并出现错误请求,并且服务器永远不会从我的应用程序中获取请求。
这是我的代码,遵循 html5rocks 教程:
var xhr = new XMLHttpRequest();
xhr.open('POST', "foo url goes here");
xhr.send(file);
正如我所说,这适用于较小的文件,但会失败并且永远不会到达具有 50mb 等较大文件的服务器。
这也不适用于普通的 AJAX 帖子,同样的问题。
我正在向 WCF 休息服务摆姿势。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Ajax upload form</title>
<script src="app/js/lib/jquery-2.0.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
$(':button').click(function(){
var formData = new FormData($('form')[0]);
$.ajax({
url: 'myurl', //server script to process data
type: 'POST',
xhr: function() { // custom xhr
var myXhr = $.ajaxSettings.xhr();
if(myXhr.upload){ // check if upload property exists
myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // for handling the progress of the upload
}
return myXhr;
},
//Ajax events
// Form data
data: formData,
//Options to tell JQuery not to process data or worry about content-type
cache: false,
contentType: false,
processData: false
});
});
function progressHandlingFunction(e){
if(e.lengthComputable){
$('progress').attr({value:e.loaded,max:e.total});
}
}
})
</script>
</head>
<body>
<form enctype="multipart/form-data">
<input name="file" type="file" />
<input type="button" value="Upload" />
</form>
<progress></progress>
</body>
</html>