Javascript 使用php脚本上载文件而不离开该页面

Javascript 使用php脚本上载文件而不离开该页面,javascript,jquery,ajax,post,Javascript,Jquery,Ajax,Post,我正在尝试用php脚本上传一个html文件 <html> <body> <form id='importPfForm' enctype="multipart/form-data" action="http://localhost/js/upload.php" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="1000000" /> Choose a f

我正在尝试用php脚本上传一个html文件

<html>
<body>
  <form id='importPfForm' enctype="multipart/form-data" action="http://localhost/js/upload.php" method="post">
    <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
    Choose a file to upload: <input name="uploaded_file" type="file" />
    <input type="submit" value="Upload" />
  </form>
</body>
</html>

选择要上载的文件:
“upload.php”包含以下代码:

<?php
$upload_key = 'uploaded_file';
if (isset($_FILES[$upload_key])) {
    try {
        $error = $_FILES[$upload_key]['error'];
        switch ($error) {
            case UPLOAD_ERR_INI_SIZE:
                throw new Exception('Exceeded upload_max_filesize');
            case UPLOAD_ERR_FORM_SIZE:
                throw new Exception('Exceeded MAX_FILE_SIZE');
            case UPLOAD_ERR_PARTIAL:
                throw new Exception('Incomplete file uploaded');
            case UPLOAD_ERR_NO_FILE:
                throw new Exception('No file uploaded');
            case UPLOAD_ERR_NO_TMP_DIR:
                throw new Exception('No tmp directory');
            case UPLOAD_ERR_CANT_WRITE:
                throw new Exception('Can\'t write data');
            case UPLOAD_ERR_EXTENSION:
                throw new Exception('Extension error');
        }
        $finfo    = new finfo(FILEINFO_MIME);
        $name     = $_FILES[$upload_key]['name'];
        $tmp_name = $_FILES[$upload_key]['tmp_name'];
        $size     = $_FILES[$upload_key]['size'];
        if ($size > 350000)
            throw new Exception('Exceeded 350KB limit');
        if (!is_uploaded_file($tmp_name))
            throw new Exception('Not an uploaded file');
        $type = $finfo->file($tmp_name);
        if ($type === false)
            throw new Exception('Failed to get MimeType');
        if ($type !== 'text/plain; charset=us-ascii')
            throw new Exception('Only csv available');
        $new_name = dirname(__FILE__).'/upload/'.$name;
    echo  $new_name;
        if (is_file($new_name))
            throw new Exception("The file {$new_name} already exists");
        if (!move_uploaded_file($tmp_name,$new_name))
            throw new Exception('Failed to move uploaded file');
        echo "File successfully uploaded as {$new_name}";
    } catch (Exception $e) {
        echo 'Error: '.$e->getMessage();
    }
}
?>


但是这种方法会打开一个新的网页。我希望在不离开网页的情况下执行该函数,并且需要在html页面中使用变量
$new\u name
。我需要在html页面中执行哪些修改?我很确定这是通过某种ajax请求实现的。但我不知道我在说什么。我不太喜欢ajax或javascript,但这是一个我经常使用的函数,我想了解它的工作原理,以便在我现在和将来需要时实现它。

这里有两种选择。您可以使用以下代码作为表单的操作,然后将php放在同一个文件中

<?php echo $_SERVER['PHP_SELF']; ?>

在upload.php中成功,然后在upload.html中,您可以使用
$\u GET['new\u name']
检索
$new\u name

将隐藏的
iframe
添加到页面中,设置表单以向其发布(
target
属性)并使您的php脚本返回一个html页面,其中一点javascript告诉父页面上载成功/失败检查以下链接。您可以尝试Ajax、HTML5或Flash uploader。或者只是使用——它非常好。@Dinoop您是否对Ajax及其工作原理做过一些研究?我不想伤害你,虽然你自己说了你“不知道在说什么”。顺便说一句,即使没有错,您也不需要在action属性中定义“”,除非您希望将数据提交到外部站点。。对XSS攻击开放。。。避免。
header("Location: upload.html?new_name=value_of_new_name");