私はAjaxで写真をアップロードしようとしましたが、Opera(My Standard Browser)で問題なく動作するコードを記述しました。今、私は他のブラウザでそれをテストしました、それらはすべてエラーで戻って撃ちます。私のPHPスクリプトは
if(!empty($_FILES)) {
//todo
} else {
exit();
}
var_dump($_FILES); die();
だから私は何が悪いのかを見るために最初に入れようとしました。それらはすべてこれを返しarray(0) {}
ます。FireFox、Chrome、Safari(すべて最新バージョン)、win7のIE9、Debianの最新のFirefoxでテストしました。最大の問題は、なぜそれが機能しないのか理解できません。開発者ツールと上記のすべてのブラウザーで、正しい名前のファイルを正しい位置に表示できるからです。
アップロードするJSは次のとおりです。
var photo_input1 = document.createElement('input');
photo_input1.setAttribute('type','file');
photo_input1.setAttribute('class','photo_input');
photo_input1.setAttribute('id','photo1');
photo_input1.addEventListener('change', function() {
upload_photo(this.id,this.files[0])
});
var upload_photo = function(filename,file) {
var data_arr = Array();
data_arr['callback_name'] = 'upload_photo';
upload_file(filename,file,'add_photo.php',data_arr);
}
var upload_file = function(filename,file,url,data_arr) {
var datapack = null;
var ajaxanswer = function() {
try {
if (ajax.readyState == 4) {
if (ajax.status == 200) {
//todo
} else {
alert('Problems:' + "\n" + ajax.statusText);
}
}
} catch(e) {
}
}
try {
var ajax = new XMLHttpRequest();
} catch(e) {
try {
var ajax = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
var ajax = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
return false;
}
}
}
if(ajax) {
if(typeof url != 'undefined') {
datapack = new FormData;
datapack.append(filename,file);
if(typeof data_arr != 'undefined') {
for(key in data_arr) {
datapack.append(key, data_arr[key]);
}
}
ajax.open('POST',url, true);
ajax.setRequestHeader('Content-type', 'multipart/form-data');
ajax.onreadystatechange = ajaxanswer;
ajax.send(datapack);
}
}
}