首页 > 解决方案 > 使用 ajax xhr_object 上传文件

问题描述

嗨,我正在尝试xmlhttprequest使用此代码发送文件。

<script type="application/javascript">
function sendcheck(opt, id_class) {
  var elts = document.querySelectorAll(id_class);
  var i = 0;
  var array_val = [];

  if(opt=='dmd'){page = 'demande_echantillon.php';id_msg = 'msg-ech';
  }else {page = 'envoi_fournisseur.php'; id_msg = 'msg';}

  subject = document.getElementById("subject").value;
  message = document.getElementById("message").value;
  myfile = document.getElementById("myfile").value;

  elts.forEach(function(id) {
    if (id.checked) {
      array_val[i] = id.value;
      i++;
    }
  });
  var liste_val = (array_val.length > 0) ? JSON.stringify(array_val) : "";

  var xhr_object = null;
  var getfile = document.getElementById("myfile");
  var file = getfile.files[0];
  var formData = new FormData();
      formData.append("myfile", file);

if(window.XMLHttpRequest) xhr_object = new XMLHttpRequest();

else if(window.ActiveXObject) xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else {alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");return;}

xhr_object.open("POST", page+"?liste="+liste_val+"&subject="+subject+"&"+id_msg+"="+message+"&myfile="+formData, true);

document.getElementById(id_msg).innerHTML = "Envoi en cours ...";

xhr_object.onreadystatechange = function() {
  if(xhr_object.readyState < 4 ){                  
            document.getElementById(id_msg).innerHTML = "Loading...";
            }
 else if(xhr_object.readyState == 4) {
    document.getElementById(id_msg).innerHTML = xhr_object.responseText;
    }
  }
xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
var data = "subject="+subject+"&liste="+liste_val+"&"+id_msg+"="+message+"&myfile="+formData;
xhr_object.send(data);
}
</script>

除了附件之外,一切都运行良好,所以我如何使用XMLHttpRequest.

PHP侧面可以访问$_FILES['myfile']以通过电子邮件将其作为附件发送。

标签: javascriptphpajaxhttp

解决方案


推荐阅读