我知道有关于此问题已有几个问题。不幸的是,他们对我的情况没有太大的帮助。无论如何,我正在研究一个应该将zip文件和其他信息上传到服务器的应用程序。它曾经在我们的旧服务器上工作,但自从我们搬到新服务器后,它决定停止工作。
我发现问题是每当用户上传文件时应该发送到服务器的数据实际上从未出现在服务器上。这是FormData
对象的关键,它用于保存表单数据并通过jQuery Ajax函数将其发送到服务器。
function upload_game_file(form) {
var book = book_list[book_list_idx]; // current book
var page = book.page_list[book.page_list_idx]; // current page
var state = page.state_list[page.state_list_idx]; // current state
if (debug) console.log("upload_game_file: " + $('#game_frm_uploaded', form).val() + " to " + $('#game_frm_imb_dir', form).val() + " for " + sessionStorage.fileAction);
var formData = new FormData(form[0]);
var test = formData.get('action');
$.ajax({
url: "utils/author/service.php",
async: true,
data: formData,
/*data: { action: formData.get("action"),
imb_game_type: formData.get("imb_game_type"),
name: formData.get("name")},*/
contentType: false,
processData: false,
type: "POST",
dataType: "json",
success: function (jd) {
if (debug) console.log("AJAX connection successful");
if (jd.status == 'error') {
window.alert(jd.value);
} else {
if (sessionStorage.fileAction == "upload") { // just upload the file
mediaContent(getFileNames($('#frm_imb_dir', form).val(), sessionStorage.mediaType));
history.go(-1);
} else { // process the book file
state.url = "data/games/" + $("#game_frm_name").val() + "/scripts/run.js";
$(".imb_custom_game_btn .ui-btn-text").text("Custom Game: " + $("#game_frm_name").val());
history.go(-1);
}
}
},
error: function () {
window.alert("Upload failed. Please try again.");
history.go(-1);
},
});
}
请注意,注释掉的data
键包含一个直接从formData
获取值的对象文字。当我使用该对象时,它完美地运行!但是当我发送formData
本身时,没有任何值存储在我的服务器端脚本的$_POST
中!我可以在注释部分填写对象文字,但我也必须上传文件,我真的不想做iframe的事情......
那么,为什么会这样呢? ajax函数有所有必要的项目,对吗?