2014-05-06 167 views
0

我想用PHP和Ajax創建一個小照片上傳。所以我不是一個PHP的傢伙,我有一些問題,總是Something went wrong with your upload!狀態。但是,當我將此設置爲表單操作時,我有成功的動作。 Anyboody可以幫忙嗎?Ajax和PHP的照片文件上傳

HTML:

<form onsubmit="return submitForm()" method="POST" enctype="multipart/form-data"> 
    <input type="file" name="pic" id="pic" multiple/> 
    <input type="submit" value="Upload" for="pic"/> 
</form> 

PHP:

<?php 

$demo_mode = false; 
$upload_dir = 'uploads/'; 
$allowed_ext = array('jpg','jpeg','png','gif'); 

if(strtolower($_SERVER['REQUEST_METHOD']) != 'post'){ 
    exit_status('Error! Wrong HTTP method!'); 
} 
if(array_key_exists('pic',$_FILES) && $_FILES['pic']['error'] == 0){ 

    $pic = $_FILES['pic']; 

    if(!in_array(get_extension($pic['name']),$allowed_ext)){ 
     exit_status('Only '.implode(',',$allowed_ext).' files are allowed!'); 
    } 
    if($demo_mode){ 
     $line = implode('  ', array(date('r'), $_SERVER['REMOTE_ADDR'], $pic['size'], $pic['name'])); 
     file_put_contents('log.txt', $line.PHP_EOL, FILE_APPEND); 

     exit_status('Uploads are ignored in demo mode.'); 
    } 
    if(move_uploaded_file($pic['tmp_name'], $upload_dir.$pic['name'])){ 
     exit_status('File was uploaded successfuly!'); 
    } 
} 
exit_status('Something went wrong with your upload!'); 

function exit_status($str){ 
    echo json_encode(array('status'=>$str)); 
    exit; 
} 
function get_extension($file_name){ 
    $ext = explode('.', $file_name); 
    $ext = array_pop($ext); 
    return strtolower($ext); 
} 
?> 

和JS:

function submitForm() { 
    console.log("submit event"); 
    $.ajax({ 
     type: "POST", 
     url: "post_file.php", 
     enctype: 'multipart/form-data' 
    }).done(function(data) { 
     console.log("PHP Output:"); 
     console.log(data); 
    }); 
    return false; 
} 

很多THX!

+0

而不是'exit_status()'使用'die()'或'exit()'並且你的錯誤可能在html形式而不是'onsubmit =「return submitForm()」'use 'onsubmit =「submitForm()」'它可能不是固定的東西:) – roun512

+0

可能的重複[如何可以上傳文件與jQuery異步?](http://stackoverflow.com/questions/166221/how-can-我上傳 - 文件 - 異步與 - jQuery的) – showdev

回答