[英]How do you post to PHP in JavaScript without Ajax?
因此,我已经有了通过ajax将拖放文件上传到PHP的代码,但是显然我的虚拟主机没有ajax。 没有ajax,有什么办法可以做到吗? 具体来说,我指的是进度条部分(似乎也不起作用...)之后的最后的UploadFile函数。
(function() {
// getElementById
function $id(id) {
return document.getElementById(id);
}
// output information
function Output(msg) {
var m = $id("messages");
m.innerHTML = msg + m.innerHTML;
}
// file drag hover
function FileDragHover(e) {
e.stopPropagation();
e.preventDefault();
e.target.className = (e.type == "dragover" ? "hover" : "");
}
// file selection
function FileSelectHandler(e) {
// cancel event and hover styling
FileDragHover(e);
// fetch FileList object
var files = e.target.files || e.dataTransfer.files;
// process all File objects
for (var i = 0, f; f = files[i]; i++) {
ParseFile(f);
UploadFile(f);
}
}
//upload images
function UploadFile(file) {
var xhr = new XMLHttpRequest();
if ( xhr.upload && file.type == "image/jpeg" || file.type == "image/gif" || file.type == "image/jpg" || file.type == "image/png" && file.size <= $id("MAX_FILE_SIZE").value
) {
//create progress bar
var o = $id("progress");
var progress = o.appendChild(document.createElement("p"));
progress.appendChild(document.createTextNode("upload " + file.name));
//progress bar
xhr.upload.addEventListener("progress", function(e) {
var pc = parseInt(100 - (e.loaded / e.total * 100));
progress.style.backgroundPosition = pc + "% 0";
}, true);
//file received/failed
xhr.onreadystatechange = function(e) {
if (xhr.readyState == 4) {
progress.className = (xhr.status == 200 ? "success" : "failure");
}
};
//start upload
xhr.open("POST", $is("upload").action, true);
xhr.setRequestHeader("X_FILENAME", file.name);
xhr.setRequestHeader("Content-type", file.type);
xhr.send(file);
}
}
// initialize
function Init() {
var fileselect = $id("fileselect"),
filedrag = $id("filedrag"),
submitbutton = $id("submitbutton");
// file select
fileselect.addEventListener("change", FileSelectHandler, false);
// is XHR2 available?
var xhr = new XMLHttpRequest();
if (xhr.upload) {
// file drop
filedrag.addEventListener("dragover", FileDragHover, false);
filedrag.addEventListener("dragleave", FileDragHover, false);
filedrag.addEventListener("drop", FileSelectHandler, false);
filedrag.style.display = "block";
// remove submit button
submitbutton.style.display = "block";
}
}
// output file information
function ParseFile(file) {
Output(
"<p>File information: <strong>" + file.name +
"</strong> type: <strong>" + file.type +
"</strong> size: <strong>" + file.size +
"</strong> bytes</p>"
);
// display an image
if (file.type.indexOf("image") == 0) {
var reader = new FileReader();
reader.onload = function(e) {
Output(
"<p><strong>" + file.name + ":</strong><br />" +
'<img src="' + e.target.result + '" /></p>'
);
}
reader.readAsDataURL(file);
$("#fileselect").val(file);
}
// display text
if (file.type.indexOf("text") == 0) {
var reader = new FileReader();
reader.onload = function(e) {
Output(
"<p><strong>" + file.name + ":</strong></p><pre>" +
e.target.result.replace(/</g, "<").replace(/>/g, ">") +
"</pre>"
);
}
reader.readAsText(file);
}
}
// call initialization file
if (window.File && window.FileList && window.FileReader) {
Init();
}
})();
我的虚拟主机没有ajax
这没有多大意义。 ( 或任何精确的含义 )。
Ajax只是您实现(使用Javascript)以便与服务器通信的功能。 (以与访问服务器上的php脚本相同的方式; Ajax使您可以在后台“获取”它,而无需重新加载页面或将其重定向到该页面)。
因此,简而言之:它与服务器/主机本身无关。
参考: http : //en.wikipedia.org/wiki/Ajax_(编程 )
没有ajax,有什么办法可以做到吗?
阿贾克斯
仅现代浏览器(阅读:不是IE的任何东西)支持AJAX上传的进度条。 您还需要以不同的方式在PHP中管理文件的上传,才能正常工作。
例如:您需要使用fopen("php://input", "r");
而不是$_FILES
。
查看此AJAX文件上传器以了解更多信息: https : //github.com/valums/file-uploader
我会建议您在这种情况下使用“ iframe”。 我是1-2年前做的,当时我们不想重新加载页面进行文件提交。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.