我正在开发一个拥有jQuery 1.4.4的系统,不会在不久的将来发生升级。因此,我遇到了一些问题,弄清楚如何提交带有文件的普通字段的表单。 (我需要在单击提交按钮后提交带有字段输入和单个文件上传的表单。)由于我已通过点击事件将所有内容都绑定到AJAX提交中,因此我有点陷入困境。从这个点击事件中做所有事情。
有没有办法通过使用AJAX提交所有内容的提交按钮点击事件上传其他正常字段输入的文件?目前,我使用以下代码提交表单:
$('#main').live('submit', function(e){
e.preventDefault();
...$test is defined up here...
var results = $.ajax({
'async': false,
'type': "POST",
'global': false,
'dataType': 'json',
'data': $test,
'url': "test.php",
'success': function (data) {
result = data;
}
});
return results;
}();
提交输入字符串和诸如此类的东西时,这是有效的。我可以看到文字"字符串名称"该文件,但$ _FILES数组(物理文件本身)没有像test.php上的var_dump($ _ FILES)那样被发送...
有没有办法做到这一切? AJAX是首选路线,但如果我必须创建一个可以提交所需字段+文件上传的不同表单,我可以...(它会很糟糕,因为我不想重复任何事情,如果我不必。)
(抱歉语法突出显示......仍然习惯了SO&#39编辑。)
以下是我正在使用的所有最新代码(它与上述内容略有不同,但我仍未在$ _FILES中看到任何内容) ...
标记:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
</head>
<body>
<div id="wrapper">
<form id="main" action="index.php" method="post" enctype="multipart/form-data">
<input id="file" type="file" value="" />
<input id="text" type="text" value="This is a test for the text input." />
<button id="submit" type="button">Submit!</button>
</form>
<p><?php var_dump($_POST); var_dump($_FILES);?></p>
</div>
<script type="text/javascript" src="___includes/jquery.js"></script>
<script type="text/javascript" src="___includes/j.js"></script>
</body>
</html>
jQuery的:
jQuery(function($) {
$('#submit').live('click', function(e){
e.preventDefault();
$('#main').submit();
});
$("#main").live("submit", function(e){
e.preventDefault();
var $text = $('#text').val();
var $file = $('#file').val();
var results = $.ajax({
'async': false,
'type': "POST",
'global': false,
'dataType': 'xml',
'data': {'text':$text,'file':$file},
'contentType': "multipart/form-data",
'url': "index.php",
'success': function (data) {
$('#wrapper p').append(data);
}
});
console.log(results);
$('#wrapper p').append(results);
return results;
});
});