我在这里测试了每一个问题,并且还搜索了很多,但没有找到有用的东西。
这是我的HTML:
<div id="createarea">
<form id="createform" action="index/create/createcontrols.php" method="post" enctype="multipart/form-data">
<input id="title" type="text" name="title" size="30" value="Title"><br><br>
<input id="description" type="text" name="description" size="30" value="Description"><br><br>
<input id="keywords" type="text" name="keywords" size="30" value="Keywords"><br><br>
<input id="link" type="text" name="link" size="30" value="Link"><br><br>
<input id="file" type="file" name="file"><br><br>
<input id="submit" type="button" name='submit' value="Create" onclick="myFunction()">
</form>
<div id="createformresults">
</div>
</div>
这是javascript:
function myFunction() {
$(function () {
$('#createform').on('submit', function (e) {
$.ajax({
type: 'post',
url: 'index/create/createcontrols.php',
data: $('#createform').serialize(),
success: function () {
document.getElementById('createarea').innerHTML = "SUCCESS";
}
});
e.preventDefault();
});
});
}
我的PHP代码:
<?php
$db=mysql_connect('','','') or die(mysql_error());
mysql_select_db("", $db) or die(mysql_error());
$title = $_POST["title"];
$description = $_POST["description"];
$keywords = $_POST["keywords"];
$link = $_POST["link"];
$image=$_FILES["file"]["name"];
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/pjpeg") || ($_FILES["file"]["type"] == "image/x-png") || ($_FILES["file"]["type"] == "image/png")) && ($_FILES["file"]["size"] < 20000) && in_array($extension, $allowedExts)) {
if ($_FILES["file"]["error"] > 0) {
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
}
else {
if (file_exists("temp/" . $_FILES["file"]["name"])) {
echo $_FILES["file"]["name"] . " already exists. ";
}
else {
move_uploaded_file($_FILES["file"]["tmp_name"], "temp/" . $_FILES["file"]["name"]);
}
}
}
else {
echo "Invalid file";
}
$qry="insert createcontent values('null','$title','$description','$keywords','$link','$image')";
$res= mysql_query($qry) or die(mysql_error());
if(mysql_affected_rows()==1) {
echo "Success";
}
else {
echo "Not Saved";
}
?>
PHP代码工作正常,问题出在js文件中。
答案 0 :(得分:5)
我会使用FormData
来执行此任务。
以下是使用FormData的代码示例:
$(function () { //On dom ready:
$("#createform").submit(function (e) { //will be triggered on submit:
e.preventDefault();
if( window.FormData !== undefined )
//make sure that we can use FormData ie>9, chrome > 7, opera > 12 safari >5, android > 3 gecko mobile > 2, opera mobile >12 <- wil support XHR too
{
var formData = new FormData($('#createform')[0]); // use "[0]" <- important
// you can append aditional values (regular text): formData.append("be","some value");
$.ajax({
url: 'index/create/createcontrols.php', //Server script to process data
type: 'POST',
data: formData,
xhr: function() { },
success: function(response){ $("#createformresults").text("SUCCESS"); },
error: function (jqXHR, textStatus, errorThrown) { $("#createformresults").text(errorThrown); },
//Options to tell jQuery not to process data or worry about content-type.
cache: false,
contentType: false,
processData: false
});
} else {
//Fallback
}
return false;
});
});
FormData将支持多文件上传!
在表单标记中添加属性:enctype="multipart/form-data"
注意:您可能会发现服务器端页面上的$_FILES
数组为空 - 在这种情况下,您需要确保您的服务器配置允许文件上传,文件上传的大小限制发布时间已经足够了
就够了......
最好的方法是确保允许文件上传,然后进行非常的测试 小文件,以确保代码中的所有内容都正常。
答案 1 :(得分:0)
最后它已经完成!!
将此来源添加到x.html
//Program a custom submit function for the form
$("form#data").submit(function(event){
//disable the default form submission
event.preventDefault();
//grab all form data
var formData = new FormData($(this)[0]);
$.ajax({
url: 'formprocessing.php',
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function (returndata) {
alert(returndata);
}
});
return false;
});
<form id="data">
<input type="hidden" name="id" value="123" readonly="readonly">
User Name: <input type="text" name="username" value=""><br />
Profile Image: <input name="profileImg[]" type="file" /><br />
Display Image: <input name="displayImg[]" type="file" /><br />
<input type="submit" value="Submit">
</form>
这是一个PHP文件(formprocessing.php):
$id = $_POST['id'];
$username = $_POST['username'];
$profileImg = $_FILES['profileImg'];
$displayImg = $_FILES['displayImg'];
我是通过此链接帮助完成的 http://digipiph.com/blog/submitting-multipartform-data-using-jquery-and-ajax
答案 2 :(得分:-2)
ajax根本不支持文件上传。但是,有一些解决方法。其中一个是名为Iframe Post Form的jQuery插件,详情来自:
http://plugins.jquery.com/iframe-post-form/
$('form').iframePostForm({
complete : function (response) {
$('#createarea').text("SUCCESS");
}
});
显然,您必须在enctype="multipart/form-data"
标记中指定网址操作和form
。
希望这有帮助!